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

时间:2019-07-09 14:02:17

标签: python text large-files

我正在尝试转换大型文本文件(大小为5 gig +),但是 通过此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直到行尾,对吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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