python文本文件和二进制文件的使用

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 "", 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 "", line 1, in <module>
    open('temp.txt','wb').write('tyxt.work\n')
TypeError: a bytes-like object is required, not 'str'

你可能感兴趣的:(python,python)