如何从文本文件中随机选择一行

10 投票
7 回答
29020 浏览
提问于 2025-04-17 16:11

我正在为我的学校制作一个彩票程序(我们有一个经济系统)。

我的程序会生成一些数字,并把这些数字保存到一个文本文件里。当我想从这个生成器中“抽取”数字时,我希望能确保一定会有一个赢家。

问题是:我该怎么用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。

摘自《Python Cookbook》第123页

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())

撰写回答