Python:读取文件直到一行与二进制模式中的字符串匹配

age*_*off 5 python python-3.x

好的,所以我已经看到了其他问题,但我遇到了一个独特的问题。我必须以二进制模式打开文件才能读取它(我真的不明白为什么,但它有效)。我可以轻松地打印出文件的行没问题。但是当我尝试使用 查找特定行时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()
Run Code Online (Sandbox Code Playgroud)

enum_name 是用户输入,所以我真的需要知道如何在搜索以二进制模式打开的文件时同时使用字符串和变量(或者如何以非二进制模式打开此文件,我得到了不能非二进制模式下的无缓冲文本 I/O 错误)。我已经尝试为搜索二进制文件制作我的模式,但是当我这样做时我不知道如何处理变量。

And*_*ark 3

您需要使用字节字符串作为正则表达式中的模式,类似以下内容应该有效:

if re.search(b"enum " + enum_name.encode('utf-8'), line):
    ...
Run Code Online (Sandbox Code Playgroud)

这里enum_name.encode('utf-8')用于将用户输入转换为对象bytes,根据您的环境您可能需要使用差异编码。

请注意,如果您的正则表达式真的这么简单,那么您可能只需使用子字符串搜索即可。