我认为您使用Python 3。
1.以 二进制模式 打开文件很简单但是很微妙。与在文本模式下打开它的唯一区别是mode参数包含一个 “ b” 字符。
........
4,这是一个区别: 二进制流 对象没有编码属性。那是有道理的,对吧? 您正在读取(或写入)字节
,而不是字符串,因此Python无需进行任何转换。http://www.diveintopython3.net/files.html#read
然后,在Python 3中,由于来自文件的二进制流是字节流,因此必须使用字节序列而不是字符序列来定义用于分析文件流的正则表达式。
在Python 2中,字符串是一个字节数组,其字符编码被单独跟踪。如果要让Python
2跟踪字符编码,则必须改用Unipre字符串(u’‘)。但是在Python 3中,字符串始终是Python
2所谓的Unipre字符串,即Unipre字符数组(字节长度可能不同)。http://www.diveintopython3.net/case-study-porting-chardet-to-
python-3.html
和
在Python 3中,所有字符串都是 Unipre字符 序列
。没有诸如以UTF-8编码的Python字符串或以CP-1252编码的Python字符串之类的东西。“这是UTF-8字符串吗?”
是一个无效的问题。UTF-8是一种将字符编码为字节序列的方式。如果您想将字符串转换为特定字符编码的字节序列,Python 3可以帮助您。http://www.diveintopython3.net/strings.html#boring-
stuff
和
4.6。字符串与字节数#字节是字节;字符是一种抽象。不变的Unipre字符序列称为字符串。在0到255之间的不变数字序列称为字节对象。
....
- 要定义字节对象,请使用b’‘“字节文字”语法 。字节文字中的每个字节可以是ASCII字符,也可以是从 x00到
xff(0–255)的编码十六进制数字。http://www.diveintopython3.net/strings.html#boring-
stuff
因此,您将如下定义正则表达式
pat = re.compile(b'[a-f]+d+')
而不是
pat = re.compile('[a-f]+d+')此处有更多说明:
15.6.4。不能在类似字节的对象上使用字符串模式



