2016-09-28 95 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

如果您按照您的代码逻辑,在for循环中迭代文件中的行,您将文件指针重新打印后立即重置为第一行。这就是为什么你得到相同的第一行打印。为了实现印刷线的随机数,你可以做,在任何数量的方式,例如:

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

在那里,阅读文件内容为lines,意志码在每一行循环之后,但只直到通过randint(1, len(lines))计算的第n个索引,并且避开0,这样至少可以得到一行打印。在打印循环之后,我们重置文件指针,然后休眠。

修订:给定新的细节,在每个循环中,我们现在随机选择要打印的行的窗口,同时沿着已打印的行移动。基本上每个迭代都有一个随机长度的滑动窗口,确保它(应该)与数组大小一致。根据需要调整。

+0

这一个看起来不错,但每次打印出列表时,它都会在time.sleep(randint(1,3))之后的第一行打印出来。是否有任何地方可以从最后的地方开始下一个印刷开始? –

+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()方法让程序在读取文件时倒带。 –