【问题标题】:File cannot be read after regex operation (Python)正则表达式操作后无法读取文件(Python)
【发布时间】:2015-11-23 05:37:24
【问题描述】:

我正在 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()

我无法理解我在这里做错了什么。

【问题讨论】:

  • 你在文件流的末尾,所以没有什么要读的了。读取文件时考虑使用with 语句关闭资源。
  • 如何使用with 语句关闭资源?我只知道f.close()
  • 这是一个示例:with open('myfile.txt') as f: 然后缩进并执行所有文件操作。当解释器离开with 语句下方缩进区域定义的范围时,它将为您关闭文件。欲了解更多信息:effbot.org/zone/python-with-statement.htm

标签: python regex python-2.7 io


【解决方案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()

我会选择第一个选项。

【讨论】:

  • 是的,第一个选项更有意义,否则我必须在每次正则表达式操作后重置位置。谢谢!
【解决方案2】:

在第二次读取之前添加f.seek(0)。一旦文件被完全读取,指针就会到达文件末尾。现在您必须向上移动指针(即文件开始)。为此,我们必须添加fileobject.seek(0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    相关资源
    最近更新 更多