如何从一个文件中读取随机行?

2024-04-26 23:45:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一个内置的方法来做这件事?如果不是,我如何在不花费太多开销的情况下做到这一点


Tags: 方法情况内置花费
3条回答

这取决于你所说的“太多”开销是什么意思。如果可以将整个文件存储在内存中,那么

import random

random_lines = random.choice(open("file").readlines())

我会成功的

import random
lines = open('file.txt').read().splitlines()
myline =random.choice(lines)
print(myline)

对于非常长的文件: 根据文件的长度在文件中随机放置,并在位置(或换行符和文件结尾)后找到两个换行符。若原始寻道位置为<;则在文件开头或之前重复100个字符;如果我们最后进了最后一排

但这太复杂了,因为文件是迭代器。所以请列出它并使用random.choice(如果需要很多,请使用random.sample):

import random
print(random.choice(list(open('file.txt'))))

不是内置的,但是Knuth的《计算机编程的艺术》中的算法R(3.4.2)(Waterman的“水库算法”)很好(在一个非常简化的版本中):

import random

def random_line(afile):
    line = next(afile)
    for num, aline in enumerate(afile, 2):
        if random.randrange(num):
            continue
        line = aline
    return line

{}迭代器产生序列2,3,4。。。因此randrange将是0,概率为1.0/num——这是我们必须替换当前选择的行的概率(引用算法的样本大小1的特例——请参阅Knuth的书以获得正确性证明==当然,我们也有一个足够小的“库”来容纳内存;-))... 确切地说,就是我们这样做的概率

相关问题 更多 >