使用python,如何选择csv文件的随机行?

2024-05-01 22:09:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从csv文件中随机选择一个单词,但我不知道如何启动它。所有单词都在一列中,但是我想得到一个随机行,这样我就可以输出一个随机单词。有什么想法吗?


Tags: 文件csv单词
3条回答

因为您声明所有单词都在一列中,所以更容易分析文件。以下是我的解决方案:

import random

with open('random_word_from_file.txt') as f:
    words = f.read().split()
    my_pick = random.choice(words)
    print my_pick

注释

  • 在这个解决方案中,我假设文件的大小正好适合内存
  • 我使用f.read().split()而不是f.readlines(),因为后者不会从单词中删除新行字符
  • 一旦有了一个单词列表,就需要调用random.choice()来随机选择一个

你可以用熊猫:

import pandas as pd
csvfile = pd.read_csv('/your/file/path/here')
print csvfile.sample()

使用^{}^{}模块。

如果您的csv文件足够小,可以放入内存,您可以读取整个文件,然后选择一行:

import csv
import random

with open(filename) as f:
    reader = csv.reader(f)
    chosen_row = random.choice(list(reader))

您必须立即读取整个文件,因为choice需要知道有多少行。

如果您乐于在数据上进行多次传递,则可以对行进行计数,然后选择一个随机行,并再次读取文件直至该行:

with open(filename) as f:
    lines = sum(1 for line in f)
    line_number = random.randrange(lines)

with open(filename) as f:
    reader = csv.reader(f)
    chosen_row = next(row for row_number, row in enumerate(reader)
                      if row_number == line_number)

如果您希望以增量方式随机选择一行,而不知道将有多少行,则可以使用reservoir sampling。这可能会比较慢,因为它将进行多个随机选择,直到行数用完,但一次只需要内存中的一行:

with open(filename) as f:
    reader = csv.reader(f)
    for index, row in enumerate(reader):
        if index == 0:
            chosen_row = row
        else:
            r = random.randint(0, index)
            if r == 0:
                chosen_row = row

相关问题 更多 >