打开文件模式包括文本模式和二进制模式,文本模式用str对象表示文件内容,二进制模式用bytes对象表示文件内容。
NO | 打开文件模式 | 表示文件内容的对象 |
---|---|---|
1 | 文本模式 | 用str对象表示文件内容 |
2 | 二进制模式 | 用bytes对象表示文件内容 |
(1)文本模式
(1.1)文本模式根据Unicode编码解释文件内容,用解释器默认编码或者入参指定的编码名进行解释。
(1.2)行末转换为’\n’字符。
(1.3)负责读写文件开始的字节顺序标记(BOM,Byte Order Mark)。
(2)二进制模式
二进制模式返回文件内容对应的字节值的整数的一个序列,不用编码和解码,没有行末转换。
(3)open的第2个参数
(3.1)python2.x版本,第2个参数为b,表示二进制模式,若没有b,则表示文本模式;默认为rt(t为text),等效于r,即文本模式。
(3.2)python3.x版本,文本文件返回str对象,二进制文件返回bytes对象。
示例(python3.x)
>>> f=open('temp.txt','w')
>>> f.write('tyxt.work\n')
10
>>> f.close()
>>> f=open('temp.txt')
>>> t=f.read()
>>> t
'tyxt.work\n'
>>> print(t)
tyxt.work
>>> f.close()
python3.x的文本文件行末字符为’\n’,二进制文件行末字符为’\r\n’。
NO | 二进制写模式 | 二进制读模式 |
---|---|---|
1 | python2.x写入内容为str对象 | python2.x读内容前面不会有b开头 |
2 | python3.x写入内容为bytes对象 | python3.x读内容前面会有b开头 |
描述
NO | 写模式 | 读模式 |
---|---|---|
1 | 文本模式写文件 | (1) 文本模式读行末字符为’\n’; (2) 二进制模式读行末字符为’\r\n’; |
2 | 二进制模式写文件 | 文本模式和二进制模式读,行末字符都为’\n’ |
示例
# 文本模式写文件 w,行末字符为 '\n' 或 '\r\n'
>>> open('temp.txt','w').write('tyxt.work\n')
# 文本模式 行末字符为 '\n'
>>> open('temp.txt','r').read()
'tyxt.work\n'
# 二进制模式 行末字符为 '\r\n'
>>> open('temp.txt','rb').read()
'tyxt.work\r\n'
# 二进制模式写文件 wb,行末字符都为 '\n'
>>> open('temp.txt','wb').write('tyxt.work\n')
# 文本模式 行末字符为 '\n'
>>> open('temp.txt','r').read()
'tyxt.work\n'
# 二进制模式 行末字符为 '\n'
>>> open('temp.txt','rb').read()
'tyxt.work\n'
描述
NO | 写模式 | 读模式 |
---|---|---|
1 | 文本模式写文件 | (1) 文本模式读行末字符为’\n’; (2) 二进制模式读行末字符为’\r\n’; |
2 | 二进制模式写文件 注:文件内容需为bytes对象或bytearray对象 | 文本模式和二进制模式读,行末字符都为’\n’ |
示例
# 文本模式写文件 w,行末字符为 '\n' 或 '\r\n'
>>> open('temp.txt','w').write('tyxt.work\n')
10
# 文本文件行末字符为 '\n'
>>> open('temp.txt','r').read()
'tyxt.work\n'
# 二进制文件行末字符为 '\r\n'
>>> open('temp.txt','rb').read()
b'tyxt.work\r\n'
# 二进制模式写文件 wb,行末字符都为 '\n'
# 二进制模式写的内容为bytes对象
>>> open('temp.txt','wb').write(b'tyxt.work\n')
10
# 文本模式 行末字符为 '\n'
>>> open('temp.txt','r').read()
'tyxt.work\n'
# 二进制模式 行末字符为 '\n'
>>> open('temp.txt','rb').read()
b'tyxt.work\n'
# 二进制模式写的内容为 bytearray 对象
>>> open('temp.txt','wb').write(bytearray(b'tyxt.work\n'))
10
>>> open('temp.txt','r').read()
'tyxt.work\n'
>>> open('temp.txt','rb').read()
b'tyxt.work\n'
描述
python3.x向文件写数据时,文本模式对应str数据,二进制模式对应bytes或bytearray数据。
如果模式和内容不匹配,写文件会报错。
示例
>>> open('temp.txt','w').write('tyxt.work\n')
10
# 'w' 文本模式,写文件 对应 str 数据,否则报错
>>> open('temp.txt','w').write(b'tyxt.work\n')
Traceback (most recent call last):
File "<pyshell#133>", line 1, in <module>
open('temp.txt','w').write(b'tyxt.work\n')
TypeError: write() argument must be str, not bytes
>>> open('temp.txt','wb').write(b'tyxt.work\n')
10
# 'wb' 二进制模式,写文件 对应 bytes或bytearray 数据,否则报错
>>> open('temp.txt','wb').write('tyxt.work\n')
Traceback (most recent call last):
File "<pyshell#135>", line 1, in <module>
open('temp.txt','wb').write('tyxt.work\n')
TypeError: a bytes-like object is required, not 'str'