2016-09-28 13 views
-1

ファイルを読み込んで送ることができるスレッド対応のPythonプログラムを書いていますが、N個の行を一度に読み込んで送る方法はありますか?ファイルを読み込んだ後に乱数を出力する

from random import randint 
import sys 
import threading 
import time 

def function(): 
    fo = open("1.txt", "r") 
    print "Name of the file: ", fo.name 

    while True: 
     line = fo.readlines() 
     for lines in line: 
      print(lines) 
      fo.seek(0, 0) 
      time.sleep(randint(1,3)) 

game = threading.Thread(target=function) 
game.start() 

次のPythonコードでは、一度に1行ずつ送信してから巻き戻すことができます。

答えて

1

コードロジックに従うと、ファイルの行を繰り返しループするループで、ファイルポインタを印刷した直後の最初の行にファイルポインタをリセットします。それで、あなたは同じ一行目を印刷するのです。 linesにファイルの内容で各ライン上で、コード意志がループを読んだ後、そこに

def function(): 
    fo = open("1.txt", "r") 
    print "Name of the file: ", fo.name 
    lines = fo.readlines() # changed the var names, lines vs. line 
    start_index = 0 
    while True: 
     length = randint(1, len(lines)-start_index) 
     for line in lines[start_index:start_index+length]: 
      print(line) 
     start_index += length 
     time.sleep(randint(1,3)) 

を、が、唯一:印刷された行の乱数を達成するには、例えば、いくつかの方法でそれを行うことができrandint(1, len(lines))によって計算され、0を避けるn番目のインデックスまで、少なくとも1行が印刷されます。印刷ループの後、ファイルポインタをリセットしてスリープします。

リビジョン:新しいディテールでは、すべてのサイクルで、すでに印刷された線に沿って移動しながら、印刷する線のウィンドウをランダム化しています。基本的に、各反復でランダムな長さのスライディングウィンドウ。配列のサイズと一貫していることを確認します。必要に応じて調整します。

+0

この1つはよさそうだが、それはリストをプリントアウトするたびに、それはtime.sleep(randint(1,3))の後に1行目から開始し、印刷します。次のプリントをどこから始めるかはどこにありますか? –

+0

もちろん、方法がありますが、最初の質問からは明らかではありませんでした。私はそれに応じて答えを更新します。 – sal

+0

@不好笑これで問題が解決した場合は、答えを受け入れてください。 – sal

1

このようなものはありますか?

from random import randint 
import sys 
import threading 
import time 

def function(): 
    fo = open("1.txt", "r") 
    print "Name of the file: ", fo.name 
    lines = fo.readlines() 
    while lines: 
     toSend = "" 
     for i in range(0,random.randint(x,y)): #plug your range in 
      toSend += lines.pop(0) 
     print(toSend) 

game = threading.Thread(target=function) 
game.start() 
+0

あなたはほぼそこにいる、何かを追加する必要があります。 ファイルを読み取っているときにプログラムを巻き戻すためのseek()メソッドをどこに追加すればよいか分かりません。 –

関連する問題