2017-06-12 7 views
0

複数のバイナリファイルを1つのCSVファイルに変換しようとしています。私のコードは、ファイルに "w"#を書き込むと動作しますが、新しい繰り返しはそれぞれ最後のものを上書きします。しかし、私が 'a'#をファイルに追加すると、結果の値は 'w'を使うときと違う(と間違っている)。追加を使わずに前回の結果を上書きせずに、結果を1つのファイルにまとめる方法はありますか?Appendが書き込みと異なる結果を出す

はここに私のコードです:

import os 
import numpy as np 

fileLib1 = ('/path1/') 
ref = ('/path2/ref.csv') 

for file in os.scandir(fileLib1): 
    with open(file,'rb') as f: 
     text = list(np.fromfile(f,dtype=np.float32)) 
    with open(ref,'a') as conv: #problem, 'a' vs 'w' 
     for n in text: 
      conv.write('%s,\n' %n) 
+0

バイナリを書き込むために 'open(file、 'ab')'を使用してください。 – Ding

+0

'ab'は私に問題を起こします。 'Kernelが死んで再起動しました'。今のところ「rb」は私のために働いているようだ。 – Appelynn

答えて

0

私はなぜあなたが開いて取得し、各反復でターゲットファイルを閉じない:単には、プログラムの先頭wでファイルを開き、それを閉じ最後に:

import os 
import numpy as np 

fileLib1 = ('/path1/') 
ref = ('/path2/ref.csv') 

with open(ref,'w') as conv: # open the target file at the beginning 
    for file in os.scandir(fileLib1): 
     with open(file,'rb') as f: 
      text = list(np.fromfile(f,dtype=np.float32)) 
     for n in text: 
      conv.write('%s,\n' %n)

また、これはおそらく、オープン/クローズするので、プログラムビットのパフォーマンスが向上します/ ...ファイルは通常、OSの操作であり、したがって、いわば自由のためではありません。

+0

提案していただきありがとうございますが、そのように配置すると、何らかの理由で結果ファイルの値が異なる場合と同じ問題が発生します。私はそれがなぜあるのか分からないが、そうである。 – Appelynn

+0

@Appelynn:その場合は、flieモードにすることはできません。奇妙な結果を含むnumpyのファイルではないと確信していますか?もともと、最後のnumpyファイルだけが保存されています。 –

+0

私は、私を台無しにしていた隠しファイルを持っています。助けてくれてありがとう。 – Appelynn

関連する問題