2017-02-25 40 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