我需要打开一个csv文件,选择1000个随机行并将这些行保存到一个新文件中。我被卡住了,不知道该怎么做。谁能帮忙?用python选择随机行并写入一个新文件
回答
所以这个问题有两个部分。首先获取你的csv的每一行,其次是随机抽样。我会建议用列表理解来构建行列表。沿着线的东西:
with open("your_file.csv", "rb") as source:
lines = [line for line in source]
一旦你得到了你想要把这些线的随机样本。幸运的是python有一个功能可以做到这一点。
import random
random_choice = random.sample(lines, 1000)
一旦你得到了你想要他们写回一个新的文件的那些行(虽然我假设你已经知道如何给出一个快速谷歌揭示了这一点),所以我将只包括了完整的一个例子清酒:
with open("new_file.csv", "wb") as sink:
sink.write("\n".join(random_choice))
它只是将您的选择作为换行符分隔字符串输出到您选择的文件。同样值得注意的是,在这种情况下,你处理的是csv并不重要,只是另一个带有一些行的文件。
如果你正在处理一个非常大的文件或担心占用太多的内存,你应该用一个生成器替换上面的列表理解,然后从中取样,但是这个过程并不那么简单。如果你在做的是更好的性能,你应该看看这个问题想咨询:Python random sample with a generator iterable iterator
的基本过程是这样的:
1.打开输入文件
这可以通过基本完成内置open
功能。
2.打开输出文件
您可能会使用在步骤1选择了同样的方法,但是你需要在读写模式下打开该文件。
3读取输入文件到一个变量
这往往是最好的一次读取文件的一行,并读取下一个之前这条线工作,但如果内存是不是一个问题,你也可以一次将整个事物读入一个变量。
4.选择选择线
会有任何数量的方式来做到这一点,取决于你是如何做的步骤#3,和您的要求。您可以使用filter
或列表理解或for
循环与if
语句等。最佳方法取决于您的目标的特定约束。
5.写选定行
以你在步骤#4中选择所选择的行,并将它们写入文件。
6.关闭文件
通常是好做法,关闭你打开,以防止资源泄露的文件。
csv模块不打开文件,也不复杂。同样在python中,你不应该明确地关闭一个文件,因为'with'语法非常强大。 OP也在寻找随机选择的行,而不是过滤器。 –
查看文档后,你对csv没有直接打开文件是正确的 - 没有使用它自己。我想“复杂”是非常主观的,但肯定。至于'with',它在内部关闭文件。如果OP决定使用'with',他将会这样做。至于随机部分,我在口语意义上解释为“随机”。如果他确实意味着他会用伪随机生成器对它们进行采样,那么我就会误解。 – Brionius
使用过滤器进行随机抽样非常低效,不直观,如果甚至可以使其工作,通常很难阅读。模块在内部关闭文件和直接调用close方法之间有区别,两者之间的混淆会导致各种愚蠢的错误(如IOErrors关闭已关闭的文件)。我认为这个答案对于另一个问题很有用,但似乎没有考虑OP的问题或python。 –
- 1. Python - 从一个文件读取数据并选择性写入新文件
- 2. 从文件中随机选择一行
- 3. 随机选择一个文件
- 4. SQL - 选择随机行合并成一个新的表
- 5. PYTHON - 随机选择
- 6. 使用python,你如何选择一个csv文件的随机行?
- 7. Python并行写入文件
- 8. 选择并复制一个随机文件几次
- 9. 选择一个随机文件,并与node.js的
- 10. 使用Python从表中选择一个随机行
- 11. 随机数文件写入
- 12. 将随机数写入Python文件并使用换行符连接
- 13. PHP:选择随机文件
- 14. 选择随机行并在同一查询中更新它们?
- 15. 选择一个随机数
- 16. 随机选择一个公式,并从列表中回答 - PYTHON
- 17. 重新生成随机选择python
- 18. 比较awk /(或python)中的连续行并随机选择一个重复行
- 19. JavaLogger随机写入第二个文件
- 20. 选择随机行
- 21. 选择cvs文件中的行并将它们写入另一个csv文件
- 22. Java,选择随机并插入
- 23. MySQL加入并选择随机字段
- 24. 用MySQL随机选择行
- 25. 如何以随机顺序将文件的每一行写入新文件?
- 26. 从Python中的前一个选择中随机选择
- 27. 选择随机数组元素并放入另一个
- 28. Python将随机整数写入换行文件
- 29. 写入从列选择随机值的环路 - 的Python
- 30. 用户选择文件名并将文件名写入文本文件[Python]
我试过这个,并得到以下错误信息。回溯(最近通话最后一个): 文件 “random.py” 41行,在 进口随机 文件 “/auto/data/nhine/Python/random.py”,第42行,在 random_choice =随机.sample(lines,1000) AttributeError:'模块'对象没有属性'sample' –
nancyh
你有一个命名空间错误。不要命名你的文件random.py –
我现在已经得到了运行的代码(我打电话给我的文件random.py,这是导致问题),但它似乎并没有产生输出文件。 – nancyh