将大文件(> = 7 GB)合并为一种快速方法

时间:2012-01-09 13:46:54

标签: python io

我有三个巨大的文件,只有两列,我需要两个。我想将它们合并到一个文件中,然后我可以将其写入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 个答案:

答案 0 :(得分:13)

合并文件的标准Unix方法是cat。它可能不会更快,但会更快。

cat file1 file2 file3 > bigfile

您可以cat直接使用sqlite

,而不是制作临时文件
cat file1 file2 file3 | sqlite database

在python中,如果以块而不是行复制文件,则可能会获得更好的性能。使用file.read(65536)一次读取64k数据,而不是使用for

遍历文件

答案 1 :(得分:2)

在类UNIX系统上:

cat file1 file2 file3 > file4

答案 2 :(得分:1)

我假设你需要重复这个过程,速度是一个关键因素。

尝试将文件作为二进制文件打开,并试验您正在阅读的块的大小。尝试4096和8192字节,因为这些是常见的底层缓冲区大小。

有一个类似的问题,Is it possible to speed-up python IO?,也可能是有趣的。