2017-06-12 66 views
0

我試圖將多個二進制文件轉換爲一個CSV文件。如果我使用'w'#write寫入文件,我的代碼可以工作,但是每個新的迭代都會寫入最後一個。但是,當我使用'a'#add添加到文件時,我的結果值與使用'w'(和不正確)時不同。有沒有辦法讓我的結果成爲一個文件而不使用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'給了我這個問題,'內核死亡,重新啓動'。 '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