Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从.txt文件随机生成一行_Python_Random_Printing_Words - Fatal编程技术网

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

Python 从.txt文件随机生成一行,python,random,printing,words,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) 我试过这样做,但它只

我对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)

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

要从文件中随机选择一行,请执行以下操作:

import random
with open('/etc/passwd') as f:
    print (random.choice(list(f)))
要从文件中选择任意行,请说第i行:

或者,这可能更有效:

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

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

import random
不会导致定义
randrange
;它会导致定义
random
,并且
random
模块中有一个名为
randrange
的函数,因此您可以执行以下操作:

for i, line in enumerate(f, random.randrange(1,14)):
或者,您也可以从random import randrange中选择

有关详细信息,请参见上的教程章节

一旦你解决了这个问题,你的代码就会工作,但是你的算法实际上并不正确

假设
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\u of\u lines)
中选择一个随机数,然后使用它。但是,如果不读取整个文件,就无法获得行数。此时,您必须关闭它并重新读取以获得所需的行数。(虽然可能会有帮助。)这非常复杂。因此,如果您有足够的内存将整个文件读入
列表中,那么只需这样做,然后从列表中选择一行就更有意义了,如Rob中所示ᵩ'“它没用”是什么意思?你能分享期望的输出和实际的输出吗?如果有一个无效的语法,我只知道回溯。哦,你使用python3。请稍等。这应该可以解决它。从文件中选择任意行的最简单、几乎肯定是最有效的方法是
linecache.getline('/etc/password',I)
。我还没有看到。谢谢你的提示。很抱歉,我的学校使用python 3,所以我认为在家里使用它会更容易
line_number = random.randrange(1, 14)
for i, line in enumerate(f):
    if i == line_number:
        break