【问题标题】:How to shuffle very large .csv files with headers in python?如何在 python 中使用标题对非常大的 .csv 文件进行洗牌?
【发布时间】:2021-07-12 00:15:07
【问题描述】:

基于this的帖子,使用shuf是最快的方式:

import sh
sh.shuf("words.txt", out="shuffled_words.txt")

但是,此代码也会对标头进行洗牌。我的文件有一个标题,我不希望标题在数据中随机播放。

【问题讨论】:

标签: python-3.x linux bash csv shuffle


【解决方案1】:

将文件内容复制到另一个不带标题的文件中:

with open("words.txt") as infile, open("words-nohead.txt", "w") as outfile:
    for i,line in enumerate(infile):
        if i: outfile.write(line)

然后打乱无头文件。然后将第一个文件的第一行和无头文件复制到 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 无论如何都会读取内存中的整个文件。您必须有足够的内存来存储该文件。

【讨论】:

  • 谢谢!如何阻止shuf words-nohead.txt 在终端中打印输出?这是一个大文件,我认为打印它会导致问题
  • 查看更新后的答案。请记住,shuf 无论如何都会读取内存中的整个文件。您必须有足够的内存来存储该文件。
  • 好吧,数据大小为 100GB+,我不确定这是否适用于数据。不过,我会尝试并接受答案,如果它有效。谢谢
  • 问问自己是否真的需要改组。如果是这样,您可能需要一个内存不足的洗牌器,这是完全不同的事情。
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2019-01-19
  • 2019-09-20
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
相关资源
最近更新 更多