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