基于this发布,使用 shuf
是最快的方法:
import sh
sh.shuf("words.txt", out="shuffled_words.txt")
但是,此代码也会打乱 header 。我的文件有一个 header ,但我不希望 header 在数据中随机播放。
最佳答案
将文件内容复制到另一个不带标题的文件中:
with open("words.txt") as infile, open("words-nohead.txt", "w") as outfile:
for i,line in enumerate(infile):
if i: outfile.write(line)
然后打乱 headless 文件。然后将第一个文件的第一行和 headless 文件复制到 shuffled_words.txt 中(我认为您可以使用 sh.cat()
来实现此目的)并删除临时文件。
实际上,您不需要 Python 来实现此目的。单独 Bash 就足够了:
head -n 1 words.txt > shuffled_words.txt
tail -n+2 words.txt | shuf >> shuffled_words.txt
请记住,无论如何,shuf 都会读取内存中的整个文件。您必须有足够的内存来容纳该文件。
关于python-3.x - 如何在 python 中打乱带有标题的非常大的 .csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68340750/