我在Python中尝试正则表达式操作。但是,一旦我使用它,我就无法再次读取该文件。
f = codecs.open(filename, 'rU', 'utf-8')
#print f.read() works here
#printing the year
year = re.search(r'Popularity in (\w+)',f.read())
print year.group(1)
#now, this returns nothing !
print f.read()
我无法理解我在这里做错了什么。
答案 0 :(得分:1)
调用f.read()
时,文件对象将遍历所有行,并且文件对象是生成器,它将记住它停止读取的位置。如果再次调用f.read()
继续阅读,文件对象将继续读取它离开的位置,即文件末尾。通过调用f.seek(0)
,您将重置文件中的位置,然后您可以再次读取该文件。在您的情况下,将文件内容保存在变量中可能更有意义,可以多次访问它。
file_content = f.read()
year = re.search(r'Popularity in (\w+)', file_content)
print year.group(1)
print file_content
或
year = re.search(r'Popularity in (\w+)', f.read())
print year.group(1)
f.seek(0) # reset the file read position
print f.read()
我会选择第一个选项。
答案 1 :(得分:0)
在第二次阅读之前添加f.seek(0)
。一旦文件被完全引导,指针就会到达文件末尾。现在你必须向上移动指针(即文件启动)。为了做到这一点,我们必须添加fileobject.seek(0)