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
因为您声明所有单词都在一列中,所以更容易分析文件。以下是我的解决方案:
注释
f.read().split()
而不是f.readlines()
,因为后者不会从单词中删除新行字符random.choice()
来随机选择一个你可以用熊猫:
使用^{} 和^{} 模块。
如果您的
csv
文件足够小,可以放入内存,您可以读取整个文件,然后选择一行:您必须立即读取整个文件,因为
choice
需要知道有多少行。如果您乐于在数据上进行多次传递,则可以对行进行计数,然后选择一个随机行,并再次读取文件直至该行:
如果您希望以增量方式随机选择一行,而不知道将有多少行,则可以使用reservoir sampling。这可能会比较慢,因为它将进行多个随机选择,直到行数用完,但一次只需要内存中的一行:
相关问题 更多 >
编程相关推荐