从.txt文件中随机生成一行

时间:2013-11-15 20:00:32

标签: python random printing words

我对python很新,并且已经设置了一个任务。我需要从.txt文件中随机生成一个单词。我可以检索特定的行,例如获取第2行或第5行,但是我想随机生成检索到的行。

这就是我目前所拥有的

input("Press Enter to continue...")

with open('words.txt') as f:
    for i, line in enumerate(f, 1):
        if i == 1:
         break
print (line)

我试过这样做,但它只是想出了randrange没有定义

input("Press Enter to continue...")

import random
with open('words.txt') as f:
    for i, line in enumerate(f, randrange(1,14)):
        if i == 1:
         break
print (line)

3 个答案:

答案 0 :(得分:2)

从文件中随机选择一行:

import random
with open('/etc/passwd') as f:
    print (random.choice(list(f)))

要从文件中选择任意一行,请说出 i 行:

with open('/etc/passwd') as f:
    print (list(f)[i])

或者,这可能更有效:

import itertools
with open('/etc/passwd') as f:
    print (next(itertools.islice(f, i, i+1)))

然而,从文件中选择任意行的“最简单,几乎肯定最有效的方法是linecache.getline('/etc/password', i)”。 - abarnert

答案 1 :(得分:1)

import random不会导致randrange被定义;它导致random被定义,random模块中有一个名为randrange的函数,所以你可以这样做:

for i, line in enumerate(f, random.randrange(1,14)):

或者,您也可以from random import randrange

有关详细信息,请参阅Modules上的教程章节。

修复此问题后,您的代码就会正常运行,但您的算法实际上并不正确。

假设randrange返回7enumerate(f, 7)返回文件的第一行,数字7,然后是第二行和数字8,依此类推。因此,i永远不会是1,而且您永远不会打印任何内容。

要使这项工作,您需要将i与随机数进行比较。像这样:

line_number = random.randrange(1, 14)
for i, line in enumerate(f):
    if i == line_number:
        break

当然,这仍然只会选择范围[1,14]中的随机行,而不是文件中的任何行。并且,如果文件太短,它将对最后一行产生很大的影响。

那么真正需要做的就是获取行数,然后在randrange(count_of_lines)中选择一个随机数,然后使用它。但是,如果不读取整个文件,就无法获得行数。此时你必须关闭它并重新阅读它以获得你想要的那个。 (虽然linecache可能会有所帮助。)这一切都非常复杂。所以,如果你有足够的内存可以将整个文件读入list,那么这样做会更有意义,然后从列表中选择一行,就像Robᵩ的回答一样。

答案 2 :(得分:0)

首先在for语句的末尾添加现在需要的右括号。