2013-07-04 76 views
1

WriteFile1()代碼剪斷打開的時候:文件被自動覆蓋在Python中,追加模式

try: 
    iOutputFile = open(IFilePath, "a") 
    if iOutputFile == 0: 
     return 

    csvInfoWriter = csv.writer(iOutputFile, delimiter=',', lineterminator='\n') 

    lenBuff = len(g_Hash) 
    for value in g_Hash.itervalues(): 
     iValueLen = len(value) 
     for index in range(0, iValueLen): 
      csvInfoWriter.writerow(value[index]) 


    iOutputFile.close() 

except: 
    print sys.exc_type 

我讀一個文件的內容,存儲這些在字典g_Hash。

讀取1000條記錄後,我調用WriteFile1()寫入文件,並且我從dict中清除了內容g_Hash [通過調用ClearRec()]。每次我調用WriteFile1()它會覆蓋我的輸出文件。

請幫助我,我要的數據,而不是要覆蓋..

編輯追加:從代碼中刪除此之後,問題仍然存在。

if iOutputFile == 0: 
     return 

更新:

ClearRec()代碼:

 WriteFile1() 
     g_Hash.clear() 

-----------是否ClearRec()會導致什麼問題? --------

+1

@Talvalin不,那是Java。 – Deestan

+0

其python,而不是java。所有功能工作文件,只是覆蓋問題。 – Emma

+0

您可能需要發佈所有的代碼(如果它很長,然後添加一個pastebin鏈接)。我將這個代碼片斷包裝在一個函數中(沒有try/except),並用另一個字典調用了兩次WriteFile1(),並且沒有發生覆蓋。我使用在Windows 7上運行的Python 2.7.3。 – Talvalin

回答

2

您需要更改追加到 「A +」

對於多一點參考 http://docs.python.org/2/library/functions.html#open

模式 'R +', 'W +' 和 'A +' 打開文件更新(注意'w +'截斷文件)。在區分二進制和文本文件的系統上,以二進制模式打開文件的模式附加'b';在沒有這種區別的系統上,添加'b'不起作用。

2

刪除以下行。它總是被評估爲False。

if iOutputFile == 0: 
    return 

內建open在Python中返回文件對象,而不是文件描述符。

>>> f = open('1', 'a') 
>>> f 
<open file '1', mode 'a' at 0x000000000281C150> 
>>> type(f) 
<type 'file'> 
>>> f == 0 
False 
+0

仍然覆蓋,我也試過。 – Emma

+0

@Emma,然後,檢查是否有任何「打開(IFilePath,」w ..「)」出現在您的代碼中。 – falsetru

+0

只有在這個函數中,我正在寫文件,沒有寫在其他地方 – Emma