我对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)
答案 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
返回7
。 enumerate(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
语句的末尾添加现在需要的右括号。