如何从文本文件中随机选择一行
我正在为我的学校制作一个彩票程序(我们有一个经济系统)。
我的程序会生成一些数字,并把这些数字保存到一个文本文件里。当我想从这个生成器中“抽取”数字时,我希望能确保一定会有一个赢家。
问题是:我该怎么用Python从我的文本文件中随机选择一行,并把这个数字作为输出呢?
7 个回答
6
def random_line():
line_num = 0
selected_line = ''
with open(filename) as f:
while 1:
line = f.readline()
if not line: break
line_num += 1
if random.uniform(0, line_num) < 1:
selected_line = line
return selected_line.strip()
虽然这里提到的大部分方法都能奏效,但它们通常会一次性把整个文件加载到内存中。不过这种方法就不一样了。即使文件很大,这种方法也能正常工作。
乍一看,这种方法可能不太容易理解。它背后的原理是,当我们已经看过N行时,每一行被选中的概率恰好是1/N。
12
如果文件非常大,你可以根据文件的大小,跳到文件中的某个随机位置,然后获取下一整行的内容:
import os, random
def get_random_line(file_name):
total_bytes = os.stat(file_name).st_size
random_point = random.randint(0, total_bytes)
file = open(file_name)
file.seek(random_point)
file.readline() # skip this line to clear the partial line
return file.readline()
18
我想知道怎么让Python从我的文本文件中随机选择一行,并把这个行号作为输出。
假设这个文件比较小,下面的方法可能是最简单的:
import random
line = random.choice(open('data.txt').readlines())