2014-06-09 87 views
0

我想使用numpy.savetxt函數,但是從文檔看來,似乎沒有一個標記指示文件是否已保存的方式。Numpy.savetxt - 我如何確保保存完成?

有沒有其他方法可以確保文檔在繼續之前保存?

我的問題是,當我保存我的文檔時,下一行打開該文檔,我得到一些問題。我使用for循環多次打開文檔並比較結果。第一次打開它是可以的。之後,這些值是不正確的和相同的。

裏面一個for循環

savetxt('forest_submitfile.csv', end_matrix , delimiter=',', fmt='%s,%s,%s', 
       header='EventId,RankOrder,Class', comments = '') 
     print('Saving for Submit in CSV SUCCESS') 
     is_file_ok = False 
     while not is_file_ok: 
      if os.path.isfile("forest_submitfile.csv") and os.access("forest_submitfile.csv", os.R_OK): 
       break 
     print('Calculate AMS Metric Score') 
     AMS_metric("solutionFile.csv", "forest_submitfile.csv") 
+0

你可以發佈一個小程序,出現此問題? – U2EF1

+0

我已經發布了代碼。我的問題是,AMS公制函數將爲我的第一次運行提供很好的價值。但是對於2nd和n-loop無用的值。 – zer02

+0

生成的forest_submitfile.csv是一個大型的350-550k行文件。 – zer02

回答

1

您還可以使用兩個功能從os檢查你。
isfile檢查是否存在文件。
R_OK檢查它是否處於可讀狀態,這意味着numpy已完成寫入。

yourFile = "C:\folder\folder\file.txt" 

import os 
if os.path.isfile(yourFile) and os.access(yourFile, os.R_OK): 
    # if you got into this check, your file is good to go! 
1

按照source,它可以引發ValueError或者失敗一個AttributeError。所以,也許趕上那些:

try: 
    np.savetxt('file', dataStructure) 
except ValueError, e: 
    print('Save failed! {}'.format(str(e)) 
    raise SystemError 
except AttributeError, e: 
    print('Save failed! {}'.format(str(e)) 
    raise SystemError 

希望這有助於...

+0

雖然這個問題有點不清楚,但似乎並沒有表明存在任何異常 - 只是保存的文件中的數據不正確/中斷 – Dannnno

+0

我將其解釋爲說OP要檢查numpy是否寫入了文件正確。所以我指出他們的職能來源,並說明有兩個例外可以提出。 – hd1