如果您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