好的,所以我已经看到了其他问题,但我遇到了一个独特的问题。我必须以二进制模式打开文件才能读取它(我真的不明白为什么,但它有效)。我可以很容易地打印出文件的行没问题。但是当我尝试使用 re.search
查找特定行时,我遇到了问题,因为我有一个字符串模式和字节对象。这是我目前所拥有的:
input_file = open(input_file_path, 'rb', 0)
for line in input_file:
if re.search("enum " + enum_name, line, 0):
print("Found it")
print(line)
exit()
enum_name 是一个用户输入,所以我真的需要知道如何在搜索以二进制模式打开的文件时同时使用字符串和变量(或者如何在非二进制模式下打开此文件,我得到了 can不在二进制模式下时不会出现无缓冲的文本 I/O 错误)。我已经尝试为搜索二进制文件制作我的模式,但我不知道在这样做时如何处理变量。
最佳答案
您需要在正则表达式中使用字节字符串作为模式,像下面这样的东西应该可以工作:
if re.search(b"enum " + enum_name.encode('utf-8'), line):
...
这里的enum_name.encode('utf-8')
是用来将用户输入转换成一个bytes
对象,根据你的环境你可能需要使用差分编码。
请注意,如果您的正则表达式真的这么简单,那么您可能只需要使用子字符串搜索即可。
关于Python:读取文件直到一行以二进制模式匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11585383/