我在尝试拆分大文件(比如大约 10GB)时遇到了一些麻烦。基本思想是简单地读取行,并将每行分组,比如 40000 行到一个文件中。但是有两种“读取”文件的方法。
1)第一个是一次读取整个文件,并将其制成一个列表。但这将需要将整个文件加载到内存中,这对于太大的文件来说是痛苦的。 (我想我以前问过这样的问题)在 python 中,我尝试过一次读取整个文件的方法包括:
input1=f.readlines()
input1 = commands.getoutput('zcat ' + file).splitlines(True)
input1 = subprocess.Popen(["cat",file],
stdout=subprocess.PIPE,bufsize=1)
好吧,那么我可以通过以下方式轻松地将 40000 行分组到一个文件中: list[40000,80000] or list[80000,120000]
或者使用列表的优点是我们可以轻松地指向特定的行。
2)第二种方式是逐行读取;读取时处理该行。那些读取的行不会保存在内存中。例子包括:
f=gzip.open(file)
for line in f: blablabla...
或者
for line in fileinput.FileInput(fileName):
我确定对于 gzip.open,这个 f 不是一个列表,而是一个文件对象。似乎我们只能逐行处理;那么我该如何执行这个“拆分”工作呢?如何指向文件对象的特定行?
谢谢
原文由 LookIntoEast 发布,翻译遵循 CC BY-SA 4.0 许可协议