Python 模塊 CSV

Python 模塊 CSV

csv 模塊負責讀取和寫入逗號分隔的文件csv(comma separated files)。

csv 文件一般是從電子表格程序(spreadsheets)或者數據庫(databases)導出來的文本格式的文件。它包含很多記錄(records)和字段(fields)。記錄是指一行數據,它由不同的字段構成,字段之間用逗號分隔。

讀取(Reading)


Python 模塊 CSV

執行:

Python 模塊 CSV

查看輸出,把每行記錄轉換成了字符串序列。

reader() 的第一個參數是使用 open() 函數打開的文件對象,也可以是可迭代的對象。這裡是一個文件對象。

文件 user.csv 是一個 csv 文件。使用 cat 命令查看它的內容,有三行,就是有三條記錄,每行有四個字段,用逗號隔開,第一行是每個字段的說明。

Python 模塊 CSV

解析器會處理字符串內的換行符,我們新建一個文件 user-linebreak.csv,文件內容如下:

Python 模塊 CSV

執行:

Python 模塊 CSV

查看輸出,字段內的換行符也能被正確的解析。

寫入(Writing)


寫入csv文件和讀取一樣簡單,使用 writer() 函數獲取一個寫入對象,然後調用對象的 writerow() 方法。

Python 模塊 CSV

執行:

Python 模塊 CSV

寫入完成後,最後打印了文件的內容。

引用(Quoting)


上面的例子中,生成的字段沒有引號,默認 writer() 函數的行為是不會加的。可以傳入第二個參數更改默認行為。

Python 模塊 CSV

第二個參數 quoating,傳入 QUOTE_NONNUMERIC,不是數字的字段加引號。

Python 模塊 CSV

有4個不同的引用(quoting)選項,他們是定義在 csv 模塊裡的常量(constants):

  • QUOTE_ALL 不管什麼類型,都加引用
  • QUOTE_MINIMAL 智能為字段加引用,這個默認的選項
  • QUOTE_NONNUMERIC 不是整數或者浮點數,加引用
  • QUOTE_NONE 不引用任何字段

方言(Dialects)


因為 csv 格式沒有標準,所以解析器需要更加的靈活(flexible),靈活性(flexibility)意味著有一些參數可以控制解析器的行為,控制他們怎麼讀取數據和寫入數據。這些參數組裝到一個對象 dialect 中,只需要調用 reader() 和 writer() 函數的時候傳入 dialect 對象。

Python 標準庫定義了3中方言,可以通過函數 list_dialects() 查看。

Python 模塊 CSV

excel 可以用於 Microsoft Excel 導出的格式,或者是 LibreOffice 導出的。

unix 使用雙引號包含所有的字段,換行符 '\n' 作為分隔符。

創建方言(Dialects)


也可以不用逗號分隔字段,例如可以使用管道符 | 分隔:

Python 模塊 CSV

我們需要創建一個方言,然後標明使用字段分隔符(delimiter)為 |

Python 模塊 CSV

執行:

Python 模塊 CSV

使用 register_dialect() 函數創建了方言 pipes,使用字段分隔符 |,成功讀取了文件。

方言的參數


方言(dialect)指定了所有的標記用來解析文件,下面列舉了方言的所有標記:

  • delimiter 字段分隔符,默認為 ,(fields separator)
  • doublequote 字段是否使用雙引號,默認為 True
  • escapechar 轉義字符,默認為 None
  • lineterminator 行分隔符,默認為回車換行 \r\n
  • quotechar 包圍字段的單字符,默認為 ''
  • quoting 字段引用,上面有描述,默認為 QUOTE_MINIMAL
  • skipinitalspace 是否忽略字段分隔符後的空白,默認為 False

使用字段名稱


默認使用 reader() 函數返回的是一個列表,csv 模塊提供了 DictReader 和 DictWriter 使返回的每一條記錄變成一個字典,方便訪問。字典的鍵可以傳入,也可以使用文件的第一行作為鍵。

Python 模塊 CSV

執行:

Python 模塊 CSV

默認 DictReader 使用第一行作為字典的鍵(key)。

使用 DictWriter 時,必須要提供一個字段名稱的序列。它才能知道數據怎麼在文件中排序。

Python 模塊 CSV

執行:

Python 模塊 CSV

初始化 DictWriter 時,傳入字段序列 fieldnames,然後使用 writeheader()方法寫入標題,最後寫入數據,writerow() 函數接收的是一個對象。


分享到:


相關文章: