尝试从文件中打印随机行,但它一次打印一个字符

时间:2016-04-01 00:16:21

标签: python

这可能是如此简单。我编写了一些东西来打印文件中的随机行,但它一次打印一个字符。这是代码。

from twython import Twython, TwythonError
import random, time

filename = open('test.txt')
line = random.choice(filename.readlines())
filename.close()

for line in line:
print line

任何帮助都绝对值得赞赏。我是初学者,所以老实说这可能很简单。

3 个答案:

答案 0 :(得分:1)

这里的问题是random.choice将返回一个字符串。实际上,你正在迭代一个字符串。您应该拨打split()后拨打random.choice,这样您最终会得到一个单词列表而不是字符串。然后你的迭代将按预期工作。

另外,你真的不应该像这样迭代:

for line in line

更改迭代器:

for word in line

此外,在处理文件时习惯使用context managers是一种好习惯。 e.g:

with open(some_file) as f:
    # do file actions here

所以,你的最终解决方案如下:

import random

with open('new_file.txt') as f:
    line = random.choice(f.readlines()).split()

for word in line:
    print(word)

答案 1 :(得分:1)

random.choice一次只返回元素,您必须使用shuffle代替:

from twython import Twython, TwythonError
import random, time

filename = open('test.txt')
lines = filename.readlines()
filename.close()

random.shuffle(lines)

for line in lines:
    print line

答案 2 :(得分:0)

有些事情,首先是可读性:

for line in line
    print line #which line do you mean?

现在,

line = random.choice(filename.readlines())

只是在文件中给你一个随机行,它不会以随机顺序给你所有的行。

您可以通过简单的调用

对数组进行随机播放
import random

filename = open('new_file.txt')

lines = filename.readlines()

random.shuffle(lines)

for line in lines:
    print line

您还可以随机从数组中随机取出项目,直到它为空

import random

filename = open('new_file.txt')

lines = set( filename.readlines() )

while( len(lines) != 0 ):
    choice = random.choice(list(lines))
    print(choice)
    lines.remove(choice)

这个答案可能会有所帮助:randomly selecting from array