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

时间:2012-07-20 18:56:48

标签: 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()

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

2 个答案:

答案 0 :(得分:3)

您需要使用字节字符串作为正则表达式中的模式,如下所示:

if re.search(b"enum " + enum_name.encode('utf-8'), line):
    ...

enum_name.encode('utf-8')此处用于将用户输入转换为bytes对象,具体取决于您可能需要使用差异编码的环境。

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

答案 1 :(得分:1)

你不需要重新。尝试

if "enum " + enum_name in line:

用'b'读取主要是关于行结尾。