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

时间:2017-04-18 15:48:31

标签: python csv random row

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

3 个答案:

答案 0 :(得分:5)

使用randomcsv模块。

如果您的$ch = curl_init(working_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $save = curl_exec($ch); curl_close($ch); file_put_contents($path_of_file, $save); 文件足够小以适应内存,您可以阅读整个内容然后选择一行:

csv

您必须立即读取整个文件,因为import csv import random with open(filename) as f: reader = csv.reader(f) chosen_row = random.choice(list(reader)) 需要知道有多少行。

如果您对通过数据进行多次传递感到高兴,可以对行进行计数,然后选择一个随机行并再次读入该文件直到该行:

choice

如果你想逐步地,随机地选择一行,而不知道会有多少行,你可以使用reservoir sampling。这可能会更慢,因为它会在行用完之前做出多个随机选择,但一次只需要内存中的一行:

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)

答案 1 :(得分:3)

您可以使用pandas:

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

答案 2 :(得分:0)

由于您声明所有单词都在一列中,因此可以更轻松地解析文件。这是我的解决方案:

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()随机选择一个