快速合并大型文件(>=7 GB)的方法
我有三个很大的文件,每个文件只有两列数据,我需要这两列。我想把它们合并成一个文件,然后再把这个文件写入SQLite数据库。
我用Python完成了这个任务,但花了超过30分钟,而且在这期间我的系统还卡了10分钟。我在想有没有更快的方法,比如用awk或者其他Unix工具。如果在Python中有更快的方法也很好。下面是我写的代码:
'''We have tweets of three months in 3 different files.
Combine them to a single file '''
import sys, os
data1 = open(sys.argv[1], 'r')
data2 = open(sys.argv[2], 'r')
data3 = open(sys.argv[3], 'r')
data4 = open(sys.argv[4], 'w')
for line in data1:
data4.write(line)
data1.close()
for line in data2:
data4.write(line)
data2.close()
for line in data3:
data4.write(line)
data3.close()
data4.close()
3 个回答
1
我假设你需要重复这个过程,而且速度是一个很重要的因素。
试着把文件当作二进制文件打开,然后试着调整你读取的块大小。可以尝试4096字节和8192字节,因为这两种大小是常见的底层缓冲区大小。
还有一个类似的问题,有没有办法加快Python的输入输出速度?,你可能也会感兴趣。
2
在类UNIX系统上:
cat file1 file2 file3 > file4
13
在Unix系统中,合并文件的标准方法是用 cat
命令。虽然它可能不会快很多,但确实会更快一些。
cat file1 file2 file3 > bigfile
与其先创建一个临时文件,你可以直接用 cat
命令把内容合并到sqlite数据库中。
cat file1 file2 file3 | sqlite database
在Python中,如果你一次复制文件的块而不是逐行复制,性能会更好。可以使用 file.read(65536)
一次读取64k的数据,而不是用 for
循环逐行读取。