2017-02-25 72 views
0

我想检查连续更新文本文件的特定列的长度。文本文件格式如下:在Python中检查更新文本文件的一列

1,-18,02,-18,02,-18,02,-18,02,-18,02,-18,02,-18,02,-18 ,02,0,00,0,00,0,00

2,-18,02,-18,02,-18,02,-18,02,-18,02,-18,02, -18,02,-18,02,0,00,0,00,0,00

3,-18,02,-18,02,-18,02,-18,02,-18, 02,-18,02,-18,02,-18,02,0,00,0,00,0,00

因此在1分钟内在文本文件中自动写入15000行。在Python代码中,我想检查这个文本文件的第一列的长度,当它达到15000的长度时,我想退出循环。下面是我的代码相关部分:

def myfun(inputpath, outpath): 
    fs = 250 #sampling frequency 
    n = 1 
    mincounter = 1 
    loc = [] 
    result = [] 
    while n < 30000: 
    while (len(loc) < (mincounter*15000)+1): 
     f=open(inputpath,"r") 
     lines=f.readlines() 
     result=[] 

     for x in lines: 
       loc.append(x.split(',')[0]) 
     for x in lines: 
      result.append(x.split(',')[1]) 
     print (len(loc)) 
     print ("a") 
     f.close() 
     vms = [float(x) for x in result] 


    print("15000 Lines Had Written")] 

然而,“LOC”阵列的长度几乎5秒而超过1分钟达到15000虽然文本文件具有不15000线太。并且在5秒内得到“15000行已写入”的输出。那么,如何在连续更新文本文件中正确检查这个长度?

感谢

+0

你能修复函数的缩进吗? – tdelaney

+0

列0是行数吗?你能在那一栏找15000吗? – tdelaney

+0

嗨,缩进是正确的。没有Ithink我不能在那个专栏中寻找15000,因为当它达到250时,它会回到0,因此在60圈时它在1分钟内达到15000。 –

回答

0

我认为问题是,你初始化循环之前,然后追加到它的循环。所以,loc有第一次尝试的字符串数量,然后在第二次添加等等。

1

您可以跟踪文件中的当前位置,然后打开/寻找该位置以检查更新。除非你在rb模式下打开(并且因为它不通过解码层,所以它的速度更快),所以寻找容易出错。你可以计算换行符的数量,而不需要花费额外的时间将输入分成行。以下函数等待直到看到行数,然后返回True。然后您的其他代码可以重新读取该文件并完成其工作。该文件可能会被操作系统缓存,以便重新读取更快。

def wait_line_count(inputpath, numlines=15000, maxtime=600): 
    pos = 0 
    count = 0 
    for _ in range(maxtime*10): 
     with open(inputpath, 'rb') as f: 
      f.seek(pos) 
      count += f.read().count(b'\n') 
      if count >= numlines: 
       return True 
      pos = f.tell() 
     time.sleep(.1) 
    return False