2017-02-25 4 views
0

テキストファイルを連続的に更新する特定の列の長さをチェックしたいと思います。テキストファイル形式は次のようになります。Pythonでテキストファイルを更新する1つの列を確認する

1、-18,02、-18,02、-18,02、-18,02、-18,02、-18,02、-18,02、-18 、02,0,00,0,00,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に達したらループから終了します。テキストファイルもない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に達する:ここに私のコードの関連する部分があります。そして、私は5秒で "15000 Lines Written"の出力を得る。ですから、テキストファイルを連続的に更新するにはどうすればこの長さを正しくチェックできますか?

おかげ

+0

関数のインデントを修正できますか? – tdelaney

+0

列0は行数ですか?あなたはその列の15000を探すことができますか? – tdelaney

+0

こんにちは、インデントが正しいです。 No Ithink私は250に達すると0に戻り、60ラップで1分に15000に達するので、私はその列で15000を探すことができません。 –

答えて

0

私はこの問題は、あなたがループする前LOCを初期化し、その後、ループの中で、それに追加することだと思います。したがって、の位置の文字列の数は1番目のattempにあり、次に2番目のattempに追加されました。

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 
関連する問題