繁体   English   中英

从txt文件打印随机行?

[英]Print random line from txt file?

我正在使用random.randint生成一个随机数,然后将该数字分配给一个变量。 然后,我想用分配给变量的数字打印行,但是我不断收到错误消息:

列表索引超出范围

这是我尝试过的:

f = open(filename. txt)
lines = f.readlines() 

rand_line = random. randint(1,10)
print lines[rand_line]

您要使用random.choice

import random
with open(filename) as f:
    lines = f.readlines()
    print(random.choice(lines))

这段代码是正确的,假设您打算将字符串传递给open函数,并且在点后没有空格...但是,请注意Python中的索引编制,即从0开始而不是1,然后以len(your_list)-1结尾。

使用random.choice更好,但是如果您想遵循自己的想法,那就应该是:

import random
with open('name.txt') as f:
    lines = f.readlines()
    random_int = random.randint(0,len(lines)-1)
    print lines[random_int]

由于randint包括两个边界,因此您必须查看len(lines)-1

f = open(filename. txt)
lines = f.readlines() 

rand_line = random.randint(0, (len(lines) - 1))  # https://docs.python.org/2/library/random.html#random.randint
print lines[rand_line]

要获得一条随机行而不将整个文件加载到内存中,可以使用Reservoir采样 (样本大小为1):

from random import randrange    

def get_random_line(afile, default=None):
    """Return a random line from the file (or default)."""
    line = default
    for i, aline in enumerate(afile, start=1):
        if randrange(i) == 0:  # random int [0..i)
            line = aline
    return line


with open('filename.txt') as f:
    print(get_random_line(f))

该算法使用O(1)额外空间在O(n)时间中运行。

您可以编辑代码来实现此目的,而不会出现错误。

f = open(filename. txt)
lines = f.readlines() 

rand_line = random. randint(0,len(lines)-1) # this should make it work
print lines[rand_line]

这样,索引不会超出范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM