打开文件,获取文件对象
fp = open(file, mode, encoding)
# file:要操作的文件路径, 使用的时候注意目录的拼接
# mode: 打开方式
# encoding: 编码方式
- 关于第一个参数file需要注意的是:
文件的路径,使用的时候要注意文件目录的拼接,在项目里时常会有人忘记拼接路径而出错。
路径问题查阅: os.path
-
关于第二个参数mode:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190313194639537.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NjA5NTAx,size_16,color_FFFFFF,t_70)
-
关于第三个参数encoding需要注意的是:
这个指定用来指定编码方式,通常不指定,系统会自动识别。
举例下面这个我曾经遇到的情况来说明问题:
不同操作系统上,默认的编码是不一样的,这个需要注意,比如在windows操作系统上,默认新建的文件的编码格式是gbk的,linux上则是默认的unicode。
写入文件的数据如果需要指定编码格式,比如我使用requests库爬取网页,将response的内容保存到文件中,写入文件时候会出错,而且response是一个HTML文件,保存之后用浏览器打开,也有可能出现了页面乱码的问题,那么这个时候就需要指定该参数。
import requests
response = requests.get('https://www.baidu.com')
with open('baidu.html', 'w+') as f:
f.write(response.text)
运行文件会报错如下:
UnicodeEncodeError: 'gbk' codec can't encode character '\xe7' in position 318: illegal multibyte sequence
这就是写入的数据的编码格式与系统默认文件格式不同导致的,第一次进行代码修改,结果如下
import requests
response = requests.get('https://www.baidu.com')
with open('baidu.html', 'w+', encoding='utf-8') as f:
f.write(response.text)
修改之后没有出现了错误,但是用浏览器打开保存的HTML文件,会发现页面乱码的问题,当然,这个乱码的根本原因就是字符集的问题(浏览器也有默认打开文件的编码方式,如果有乱码的问题,考虑以下这个问题,还有response返回的HTML文件的charset我们使用的百度的charset是UTF-8的,当然这个编码格式问题不是我们这篇文章主要研讨的),我们以open函数的使用来寻求以下两种解决方式:
import requests
response = requests.get('https://www.baidu.com')
with open('baidu.html', 'w+', encoding='utf-8') as f:
# response.content是bytes类型的内容,对bytes数据进行编码
f.write(response.content.decode('utf-8'