为什么这个python脚本突然停止写入文件



这个小脚本读取一个文件,尝试用正则表达式匹配每一行,并将匹配的行附加到另一个文件:

regex = re.compile(r"<http://dbtropes.org/resource/Film/.*?> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://dbtropes.org/resource/Main/.*?> .")
with open("dbtropes-v2.nt", "a") as output, open("dbtropes.nt", "rb") as input:
    for line in input.readlines():
        if re.findall(regex,line):
            output.write(line)
input.close()
output.close()

然而,脚本在大约5分钟后突然停止。终端显示"进程已停止",输出文件保持空白。

输入文件可以在此处下载:http://dbtropes.org/static/dbtropes.zip这是4.3Go的三分之一文件。

我的代码有问题吗?是别的东西吗?任何提示都将不胜感激!

由于内存不足而停止。input.readlines()在返回行列表之前将整个文件读入内存。

相反,使用input作为迭代器。这一次只读取几行,并立即返回。

不要这样做:

for line in input.readlines():

这样做:

for line in input:

考虑到每个人的建议,您的程序变成:

regex = re.compile(r"<http://dbtropes.org/resource/Film/.*?> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://dbtropes.org/resource/Main/.*?> .")
with open("dbtropes.nt", "rb") as input:
    with open("dbtropes-v2.nt", "a") as output
        for line in input:
            if regex.search(line):
                output.write(line)

使用for line in input而不是readlines()来防止它读取整个文件。

次要的一点是:如果将文件作为上下文管理器打开,则不需要关闭它们。你可能会发现它像这样更干净:

with open("dbtropes-v2.nt", "a") as output
     with open("dbtropes.nt", "rb") as input:
          for line in input:
              if re.findall(regex,line):
                  output.write(line)

相关内容

  • 没有找到相关文章

最新更新