从txt文件打印随机行?

问题描述 投票:1回答:4

我使用random.randint生成一个随机数,然后将该数字赋给变量。然后我想打印带有我赋给变量的数字的行,但我一直收到错误:

列表索引超出范围

这是我试过的:

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

rand_line = random. randint(1,10)
print lines[rand_line]
python random
4个回答
6
投票

你想使用random.choice

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

0
投票

这段代码是正确的,假设你打算将一个字符串传递给open函数,并且你在dot之后没有空格......但是,要注意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


0
投票
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]

0
投票

要获得随机行而不将整个文件加载到内存中,您可以使用Reservoir sampling(样本大小为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(n)额外空间在O(1)时间运行。

© www.soinside.com 2019 - 2024. All rights reserved.