随机混合300万行文件的行

42 投票
11 回答
32610 浏览
提问于 2025-04-16 09:31

标题已经说明了一切。我在想有没有人知道一种快速且内存需求合理的方法,来随机打乱一个有300万行的文件中的所有行。我想用简单的vim命令可能做不到,所以我希望能有个简单的Python脚本。我尝试过用Python和随机数生成器,但没找到简单的方法。

11 个回答

30

我刚刚在一个有430万行的文件上试了一下,发现最快的方式是使用Linux中的'shuf'命令。你可以这样使用它:

shuf huge_file.txt -o shuffled_lines_huge_file.txt

这个过程大约花了2到3秒钟就完成了。

62

在Python中只需要几秒钟:

import random
lines = open('3mil.txt').readlines()
random.shuffle(lines)
open('3mil.txt', 'w').writelines(lines)
38
import random
with open('the_file','r') as source:
    data = [ (random.random(), line) for line in source ]
data.sort()
with open('another_file','w') as target:
    for _, line in data:
        target.write( line )

这样就可以了。大多数机器的内存可以容纳300万行,除非这些行特别长(超过512个字符)。

撰写回答