open(file, mode=‘r’, buffering=-1, encoding=None)
----返回一个文件对象 file object.
1、mode
- open一个文件时,默认是t模式,即文本模式。b:一般用于非文本文件,例如图片的读写。当模式中有‘b’时,就会返回一个不编码的bytes对象
- w和a都可以在文件不存在时创建一个文件
- r+模式:读:指针在开头,写:指针在结尾
- 所有r模式下,文件必须存在。
- 只要有w,一打开就删除原文件内容.
2、buffering
默认是-1,使用系统默认缓冲机制。一般不用修改。两个概念:缓冲、缓存。缓冲是程序向存储写文件时开辟的一个内存空间,主要内存I/O速度快远高于外设(硬盘、键鼠等)的速度。使用缓冲可以提高写速度。
3、encoding
对文件解码或者编码的方法。只有在处理文本文件时才能使用。windows默认encoding是cp936,即GBK。linux默认encoding是utf8。可指定为;utf8或者GBK。不指定则使用系统默认的编码格式。
通常遇到错误如下错误,一般是文件的编码格式与指定的编码格式不符合。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd7 in position 0: invalid continuation byte
UnicodeDecodeError: 'gbk' codec can't decode byte 0x97 in position 2: illegal multibyte sequence
4、open()后对象的属性
- f.encoding:返回编码格式
- f.closed:文件是否关闭
- f.name:文件的名称
5、open()后对象的常用方法
- f.read(size):一次性将文件内容返回成一个str。如果文件过大,慎用,指定size大小,避免内存爆炸。
- f.readline(size=-1):第一次运行读取文件的第一行,后续每次运行读取下一行,类似生成器,直到遇到EOF结束。每次返回一个str,为每一行数据。
- f.readlines():读取文件每一行,返回一个list
- f.write():如果打开的是默认模式即文本文件,写入必须是str对象。可以在结尾加上+‘\n’进行换行。如果指定‘b’,二进制模式。则要是bytes对象。
with open
常用句式。这是对open函数的包裹,为了避免文件被打开后由于各种原因没有及时的关闭,释放资源。
with open(filepath, mode, encoding, ...) as f:
data = f.read()
参考:
[1] https://docs.python.org/3/library/functions.html?highlight=open#open
[2] https://docs.python.org/3/library/io.html#module-io