我想检查连续更新文本文件的特定列的长度。文本文件格式如下:
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秒内。那么,如何在连续更新文本文件中正确检查此长度?
由于
答案 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 的字符串数量是第一次尝试,然后是第二次添加,依此类推。