在Python中检查一列更新文本文件

时间:2017-02-25 22:14:58

标签: python file text updating content-length

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

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

然而,&#34; loc&#34;尽管文本文件也没有15000行,但是数组在5秒内达到15000而不是1分钟。我得到了&#34; 15000行已写入的输出&#34;在5秒内。那么,如何在连续更新文本文件中正确检查此长度?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为问题是你在循环之前初始化 loc ,然后在循环中追加它。因此, loc 的字符串数量是第一次尝试,然后是第二次添加,依此类推。