我需要从csv文件中选择一个随机单词,我只是不知道如何启动它。所有单词都在一列中,但我想得到一个随机行,以便我可以输出一个随机单词。有什么想法吗?
答案 0 :(得分:5)
如果您的$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()
随机选择一个