我想尝试将大文件(比如约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]或list[80000,120000]
。
使用列表的优点是我们可以轻松地指向特定的行。
2)第二种方法是逐行读取。在读取时处理该行。这些读取的行不会保存在内存中。 例如:
f=gzip.open(file)
for line in f: blablabla...
或for line in fileinput.FileInput(fileName):
我确定在gzip.open中,这个f不是一个列表,而是一个文件对象。而且似乎我们只能逐行处理;那么如何执行这个“split”任务呢?如何指向文件对象的特定行?
谢谢