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

使用python,如何选择csv文件的随机行?,python,csv,random,row,Python,Csv,Random,Row,我需要从csv文件中随机选择一个单词,但我不知道如何启动它。所有单词都在一列中,但我想得到一个随机行,这样我就可以输出一个随机单词。有什么想法吗?你可以使用熊猫: import pandas as pd csvfile = pd.read_csv('/your/file/path/here') print csvfile.sample() 由于您声明所有单词都在一列中,因此更容易解析文件。以下是我的解决方案: import random with open('random_word_from

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

你可以使用熊猫:

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

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

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()
    随机挑选一个单词
使用和模块

如果您的
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)
如果您希望以增量方式随机选择一行,而不知道将有多少行,则可以使用。这可能会比较慢,因为它会做出多个随机选择,直到用完所有行,但一次只需要内存中的一行:

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

使用和模块。我会计算行数。由此可以生成1到行数范围内的随机整数。完成此操作后,只需在该行读取单词?如果文件太大,无法一次性全部读入内存,则可以使用。