2011-11-02 68 views
1

系統信息:
的Python 2.7.2
MAC OSX 10.7.2錯誤閱讀和寫作的CSV文件到蟒蛇

問題(+背景):
我有一個大的「.csv格式文件(〜 1演出)需要一些小的編輯。第5列中的每個值都需要5個字符長(有些長度爲4個字符,並且需要在其前面放置一個「0」)。代碼(如下所示)在運行時報告沒有錯誤,但在文件左側停止寫入約100行(從而丟失一些關鍵數據!)。任何人都知道這是爲什麼發生?

我重新創建了'read_file.csv'並檢查了它,但我沒有看到任何不合適的地方。代碼總是在相同的位置中止,但我不明白爲什麼?

import csv 

path = '/Volumes/.../' 

r = csv.reader(open(path + 'read_file.csv','rU')) 
f = open(path + 'write_file.csv', 'wb') 

writer = csv.writer(f) 

for line in r: 

    if len(line[5]) == 4: 
     line[5] = '0' + line[5] 

    writer.writerow((line[0],line[1],line[2],line[3],line[4],line[5],line[6],line[7])) 
+0

爲什麼在二進制模式下打開文件? – Andrey

+0

你可以給一個文件的例子嗎? – chown

+1

什麼是錯誤信息? – ktdrv

回答

1

要麼寫它後關閉輸出文件,或撰寫with方面的輸出,即使發生錯誤,這將永遠關閉文件:

with open('path + 'write_file.csv', 'wb') as f: 
    writer = csv.writer(f) 
    for line in r: 
     ... 
+0

這解決了這個問題。非常感謝你的幫助!! – nfisher

0

檢查事項:

  • 你檢查這是你的代碼後,已退出,讓你知道該文件已被.close().flush()版?

  • 是否有可能在你的數據中有一些奇怪的東西讓它認爲文件的其餘部分是字段中的數據?

  • 您只保存行的一定數量的列;你可以嘗試writer.writerow(line),而不是...

0

確保文件正確關閉,with可以讓您輕鬆完成。

with open('test.csv', 'rU') as inp: 
    csvin=csv.reader(inp) 
    with open('output.csv', 'wb') as outp: 
     csvout=csv.writer(outp) 
     for line in csvin: 
      csvout.writerow(line[:4] + [line[4].rjust(5, '0')] + line[5:])