快速合并大型文件(>=7 GB)的方法

6 投票
3 回答
4964 浏览
提问于 2025-04-17 09:51

我有三个很大的文件,每个文件只有两列数据,我需要这两列。我想把它们合并成一个文件,然后再把这个文件写入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 循环逐行读取。

撰写回答