0

我正在尝试.txt使用正则表达式解析文件:

#file = '22 test 333'

with open('file.txt', 'r') as f:
    pattern = '\d\d(?=\s)'    # should match 22
    data = re.compile(pattern)
    print f.read()            # prints '22 test 333'
    print data.findall(f.read())   # outputs an empty list [] 

正则表达式是正确的。为什么在我阅读文件后,正则表达式不再匹配?最后如何使用正则表达式解析文件中的文本?

4

3 回答 3

4

您已经阅读了该文件。文件指针现在位于末尾,您将不再读取任何数据。

存储一次文件数据:

contents = f.read()
print contents                 # prints '22 test 333'
print data.findall(contents)   # outputs ['22'] 

或者,回到起点:

print f.read()                 # prints '22 test 333'
f.seek(0)
print data.findall(f.read())   # outputs ['22'] 

或重新打开文件。

于 2013-06-27T11:01:19.510 回答
1

您正在读取已读取的文件。如果您省略“print f.read()”行,一切都应该正常。或者,在打印文件后,您可以执行“f.seek(0)”,这应该会将文件中的光标返回到第一个位置。

于 2013-06-27T11:02:50.050 回答
1

将返回值存储f.read()到变量中。第一个f.read()实际读取整个数据并将文件指针放在文件末尾。因此, nextfile.read()实际上返回一个空字符串''

text = f.read()
print data.findall(text)
于 2013-06-27T11:02:58.853 回答