微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式解析二进制文件?

如何解决正则表达式解析二进制文件?

我认为您使用Python 3。

1.以 打开文件很简单但是很微妙。与在文本模式下打开它的唯一区别是mode参数包含一个 字符。

........

4,这是一个区别: 对象没有编码属性。那是有道理的,对吧? ,而不是字符串,因此Python无需进行任何转换。

http://www.diveintopython3.net/files.html#read

然后,在Python 3中,由于来自文件的二进制流是字节流,因此必须使用字节序列而不是字符序列来定义用于分析文件流的正则表达式。

在Python 2中,字符串是一个字节数组,其字符编码被单独跟踪。如果要让Python 2跟踪字符编码,则必须改用Unicode字符串(u’‘)。但是在Python 3中,字符串始终是Python 2所谓的Unicode字符串,即Unicode字符数组(字节长度可能不同)。

http://www.diveintopython3.net/case-study-porting-chardet-to- python-3.html

。没有诸如以UTF-8编码的Python字符串或以CP-1252编码的Python字符串之类的东西。“这是UTF-8字符串吗?” 是一个无效的问题。UTF-8是一种将字符编码为字节序列的方式。如果您想将字符串转换为特定字符编码的字节序列,Python 3可以帮助您。

http://www.diveintopython3.net/strings.html#boring- stuff

4.6。字符串与字节数#字节是字节;字符是一种抽象。不变的Unicode字符序列称为字符串。在0到255之间的不变数字序列称为字节对象。

....

  1. 。字节文字中的每个字节可以是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。不能在类似字节的对象上使用字符串模式

解决方法

我有一个混合二进制数据和文本数据的文件。我想通过正则表达式解析它,但出现此错误:

TypeError: can't use a string pattern on a bytes-like object

我猜该消息意味着Python不想解析二进制文件。我正在打开带有"rb"标志的文件。

如何在Python中使用正则表达式解析二进制文件?

编辑: 我正在使用Python 3.2.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。