2016-04-01 8 views
-1

これはおそらく簡単なことです。ファイルからランダムな行を出力するスクリプトを作成していますが、一度に1文字ずつ出力します。ここにコードがあります。ファイルからランダムな行を印刷しようとしていますが、一度に1文字ずつ印刷します。

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 

ご協力いただければ幸いです。私は初心者ですので、正直なことはおそらく単純なものでしょう。

答えて

1

ここでの問題は、random.choiceが文字列を返すことです。実際には、文字列を繰り返し処理しています。 random.choiceに電話した後にsplit()に電話すると、文字列ではなく単語のリストが表示されます。その後、あなたの反復は期待通りに機能します。

また、あなたは本当にこのように繰り返すべきではありません。

for line in line 
は、あなたのイテレータを変更

for word in line 

また、ファイルを処理する際にcontext managersを使用してに慣れることをお勧めだろう。例えば:

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) 
+0

あなたは最高です!魅力のように動作します。ありがとう! – NMetallic

+1

OPに 'open' /' close'の代わりにファイルに 'with'を使用するように指示するのを忘れてしまいました。 – jpmc26

+0

@ jpmc26はOP即時の問題に集中しようとしていたことを忘れていませんでしたが、それは良い提案です。ありがとう。追加されました。 – idjaw

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 
0

Aカップルのもの、最初のものは可読性です:

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

さて、

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

はちょうどそれがあなたにランダムな順序ですべての行を与えることはありません、あなたのファイルのランダムな行を与えます。

あなたはこの答えは役に立つかもしれ

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) 

空になるまで、あなたはまた、アレイの外にアイテムを取って、ランダムに保つことができるシンプルなコール

import random 

filename = open('new_file.txt') 

lines = filename.readlines() 

random.shuffle(lines) 

for line in lines: 
    print line 

で配列をシャッフルすることができますrandomly selecting from array

+0

良い点、私はそれを修正します。 –

関連する問題