2015-04-23 30 views
1

我有一個代碼從服務器更新CSVs。在寫入csv後python出現意外的換行符

a = urllib.urlopen(url) 
data = a.read().strip() 

然後我附加數據到CSV通過

f = open(filename+".csv", "ab") 
f.write(ndata) 
f.close() 

的問題是,隨機地,以CSV的線被寫入這樣的(或獲取換行符某處:它使用獲取數據沿着CSV):

2,,,,, 
015-04-21 13:00:00,18,998,50,31,2293 

而不是其通常的形式:

2015-04-21 13:00:00,6,1007,29,25,2394 
2015-04-21 13:00:00,7,1004,47,26,2522 

我試着在程序運行後在shell中打印我的數據,它會顯示破損的csv條目實際上看起來是正常的。

希望你們能幫助我。謝謝。

運行的Python 2.7.9在win8.1

+0

爲什麼在二進制模式下打開CSV? –

+0

我希望你知道在上面的代碼片段中'ndata'應該是'data'。也許這是一個錯字。 –

+0

@DanielRoseman - 在這裏閱讀一些答案,如果在Windows中,CSV應該以二進制打開。也試圖以「a」模式打開它。 – carlo

回答

0

你的 「NDATA」 變量進行什麼樣的行動?

你應該使用CSV模塊來管理CSV文件:評論後https://docs.python.org/2/library/csv.html

編輯:

如果不希望使用「CSV」模塊,我聯繫你,而不是

a = urllib.urlopen(url) 
data = a.read().strip() 
ndata = data.split('\n') 
f.write('\n'.join(ndata[1:])) 

你應該這樣做:

a = urllib.urlopen(url) 
f.writelines(a.readlines()[1:]) 

我不如果您確定您的傳入數據是正確的,請查看解釋您的隨機不需要的「\ n」的任何原因。你管理很長的路線嗎? 我建議您使用csv模塊來讀取您的輸入內容:如果輸入正確,您將確保擁有有效的CSV內容。

+0

沒有其他操作在數據上完成。 追加後,但在此之前我關閉該文件: 「DF = pd.read_csv(文件名+ 「CSV 」) DF = df.drop_duplicates() df.to_csv(文件名+「。CSV」,索引=假)' – carlo