python文本文件和二进制文件的使用
2024-01-02 14:52:15
1 python文本文件和二进制文件的使用
打开文件模式包括文本模式和二进制模式,文本模式用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对象。
1.1 文本文件基础
示例(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()
1.2 python的文本和二进制模式
python3.x的文本文件行末字符为’\n’,二进制文件行末字符为’\r\n’。
NO | 二进制写模式 | 二进制读模式 |
---|---|---|
1 | python2.x写入内容为str对象 | python2.x读内容前面不会有b开头 |
2 | python3.x写入内容为bytes对象 | python3.x读内容前面会有b开头 |
1.2.1 python2.x文本和二进制模式
描述
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'
1.2.2 python3.x文本和二进制模式
描述
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'
1.3 python3.x模式和内容不匹配
描述
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'
文章来源:https://blog.csdn.net/sinat_34735632/article/details/135338687
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!