我正在尝试转换一个大文本文件(大小超过 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
直到行尾,对吧?
您可以迭代打开文件的行。
for filename in os.listdir(path):
inp, out = open_files(filename):
for line in inp:
out.write(line)
inp.close(), out.close()
请注意,我隐藏了函数中不同路径、编码、模式的复杂性,我建议您实际编写......
重新缓冲,即读取/写入较大的文本块,Python 会秘密进行自己的缓冲,因此相对于更复杂的解决方案来说,这不会太慢。