0

我需要打开一个 csv 文件,选择 1000 个随机行并将这些行保存到一个新文件中。我被卡住了,不知道该怎么做。任何人都可以帮忙吗?

4

2 回答 2

21

所以这个问题有两个部分。首先获取 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

于 2013-08-19T13:26:44.743 回答
-1

基本程序是这样的:

1.打开输入文件

这可以通过基本的内置open函数来完成。

2.打开输出文件

您可能会使用在步骤#1 中选择的相同方法,但您需要以写入模式打开文件。

3. 将输入文件读入一个变量

通常最好一次读取一行文件,并在读取下一行之前对这一行进行操作,但如果内存不是问题,您也可以一次将整个内容读入一个变量。

4.选择选定的行

有多种方法可以做到这一点,具体取决于您如何执行第 3 步以及您的要求。您可以使用filter、 或列表理解,或for带有if语句的循环等。最好的方法取决于您的目标的特定约束。

5. 写下选中的行

获取您在步骤#4 中选择的选定行并将它们写入文件。

6.关闭文件

关闭已打开的文件以防止资源泄漏通常是一种很好的做法。

于 2013-08-19T13:32:52.787 回答