簡體   English   中英

如何附加到CSV文件?

[英]How to append to a CSV file?

使用Python附加CSV文件,我每隔一行獲取數據。 我該如何解決?

import csv

LL = [(1,2),(3,4)]

Fn = ("C:\Test.csv")
w = csv.writer(open(Fn,'a'), dialect='excel')
w.writerows(LL)

C:\\test.csv打開時如下所示:

1,2

3,4

1,2

3,4

追加與問題無關。 請注意,前兩行(來自原始文件的行)也是雙倍行距。

真正的問題是您已以文本模式打開文件。

CSV是一種二進制格式,信不信由你。 csv模塊按預期將\\r\\n寫入了一個誤導性名稱為“ lineterminator”(應為“ rowseparator”),但隨后Windows C運行時啟動並用\\r\\n替換了\\n ,以便您擁有\\r\\r\\n行之間的\\r\\r\\n當您使用Excel“打開” csv文件時,它會變得混亂

無論是否在Windows上運行,請始終以二進制模式(“ rb”,“ wb”,“ ab”)打開CSV文件。 這樣,即使在* x盒子上,您也將獲得預期的行分隔符(CR LF),您的代碼將是可移植的,並且數據中嵌入的任何換行都不會更改為其他內容(在編寫時)或引起戲劇性(在輸入時) ,當然只要正確引用即可)。

其他問題:

(1)不要將數據放在根目錄( C:\\ )中。 Windows在1980年代從MS-DOS繼承了分層文件系統。 用它。

(2)如果必須在代碼中嵌入硬連線的文件名,請使用原始字符串r"c:\\test.csv" ...如果您具有"c:\\test.csv"則'\\ t'將被解釋為TAB字符; \\r\\n類似的問題

(3)Python手冊中的示例更加簡潔而不是健壯的代碼。

不要這樣做:

w = csv.writer(open('foo.csv', 'wb'))

做這個:

f = open('foo.csv', 'wb')
w = csv.writer(f)

然后,完成操作后,您就有f可用,可以執行f.close()來確保將文件內容刷新到磁盤。 更好的是:閱讀新的with語句。

在Windows上運行時,在添加一個已經創建的csv文件時遇到了類似的問題。

在這種情況下,以“二進制”模式進行寫入和附加操作可避免在使用python腳本寫入或附加的每一行中添加額外的行。 因此;

w = csv.writer(open(Fn,'ab'),dialect='excel')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM