使用Python读取大文本文件并写入另一个文件

问题描述 投票:0回答:1

我正在尝试转换一个大文本文件(大小超过 5 GB),但我从这个post中得到了一个,我设法将文本文件的编码格式转换为可以用此读取的格式:

path ='path/to/file'
des_path = 'path/to/store/file'
for filename in os.listdir(path):
    with open('{}/{}'.format(path, filename), 'r+', encoding='iso-8859-11') as f:
            t = open('{}/{}'.format(des_path, filename), 'w')
            string = f.read()
            t.write(string)
            t.close()

这里的问题是,当我尝试转换大尺寸(5 GB+)的文本文件时。我会收到这个错误

Traceback (most recent call last):
  File "Desktop/convertfile.py", line 12, in <module>
    string = f.read()
  File "/usr/lib/python3.6/encodings/iso8859_11.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
MemoryError

我知道它无法读取这么大的文件。我从几个链接中发现我可以通过逐行阅读来完成。

那么,我该如何应用到我必须使其逐行读取的代码呢?我对这里逐行阅读的理解是,我需要从

f
读取一行并将其添加到
t
直到行尾,对吧?

python text large-files
1个回答
1
投票

您可以迭代打开文件的行。

for filename in os.listdir(path):
    inp, out = open_files(filename):
    for line in inp: 
        out.write(line)
    inp.close(), out.close()

请注意,我隐藏了函数中不同路径、编码、模式的复杂性,我建议您实际编写......

重新缓冲,即读取/写入较大的文本块,Python 会秘密进行自己的缓冲,因此相对于更复杂的解决方案来说,这不会太慢。

© www.soinside.com 2019 - 2024. All rights reserved.