【Python Library】csv — CSV File Reading and Writing 使用說明

1、概述

CSV(逗號分隔符)文件是表格與數據庫操做之中最經常使用的輸入輸出格式。在RFC4180中的文件描述標準對CSV格式進行規範以前,CSV格式文件就已經被應用了不少年了。而缺少合適的格式描述規範意味着不一樣應用的輸入輸出格式會有着細微的差異。所以在從不一樣源生成這些文件的時候,這些差異至關惱人。可是儘管不一樣規範的CSV之中,分隔符和引用符千差萬別,他們的格式仍是大致類似的,所以製做一個能夠高效處理(manipulate)csv文件中的數據同時還能將讀寫的細節隱去的模塊並非什麼難事兒。
Python中的CSV模塊之中實現了讀寫CSV格式文件的一些類,他可讓你的程序以一種更容易被Excel處理的格式來輸出或者讀入數據,而沒必要糾結於CSV文件的一些麻煩的小細節。並且CSV模塊可讓你更自由的定製你想要的CSV格式文件。數據庫

2、類與方法簡介

1.數據讀取

csv.reader(csvfile, dialect='excel', **fmtparams)
他是讀取CSV文件時最經常使用的方法
他的csvfile參數須要一個文件類型的對象,好比:spa

fileObj = open('E:/inputFile.csv','r')
csvReader = csv.reader(fileObj)

那麼這個方法返回的csvReader就是一個能夠按行讀取文件的對象。unix

An optional dialect parameter can be given which is used to define a set of parameters specific to a particular CSV dialect.

其實這個看你想以什麼規範操做csv文件,可選的參數有三個,分別是excel,excel-tab和unix,基本用不着該這個參數。
而至於fmtparams包含的可選參數就得好好說道說道了。excel

delimiter

這個參數是用來指明分割符的,多數csv文件的分隔符是英文逗號,可是萬一有文件整點幺蛾子咋整,好比把英文冒號當分割符,那就要把這個參數指明爲:delimiter=':'code

quotechar

這個參數指明瞭引用符是啥,什麼是引用符呢,舉個例子,正常狀況下,咱們的csv之中的一行多是這個樣子的:abc,bcd,cde。就像這樣
clipboard.png
這沒啥問題
可是萬一你的csv文件的每有一個表格裏記錄的是:ab,c,就像這樣
clipboard.png
這就出事兒了,由於csv當你的一個表格內出現了一個英文逗號,而此時你的分隔符也剛好是英文逗號,那把這玩意關了在打開,那最後豈不是會變成了
clipboard.png
這樣,爲了防止這種狀況發生,就須要用引用符了,咱們把ab,c用雙引號括起來,告訴程序,這個「ab,c」是一個東西,不準拆分,就能夠了。而所以,你能夠傳入quotechar='xxx'來定義你本身的引用符。對象

quoting

他的功能是指明瞭引用的模式,首先說,他能夠接受幾種參數,長得像csv.QUOTE_的參數均可以傳進去,好比說csv.QUOTE_NONE,就是告訴程序,個人csv文件裏不存在引用符,也就是說,全部的逗號都當作分隔符,無論他在不在引用符裏面。blog

doublequote

那麼萬一咱們的一個表格裏自己就即包括一個英文逗號又包括一個雙引號,而剛好你的分隔符是英文都好,而引用符也是英文雙引號,這不又出事兒了麼,就比如,假如你的一個行長這樣,
clipboard.png
因爲第二列裏有一個逗號,那就要用引用符把這個東西包起來,而裏面又有一個雙引號,那這時候匹配雙引號的時候就會出錯了,而爲了防止這種問題的產生,咱們在文件編輯的時候,能夠把引用符之中的雙引號重複一次,用來表明:這個表格裏出現了一次雙引號,好比用記事本打開的時候,像這樣
clipboard.png
這樣在csvReader讀取文件的時候,他若是碰到了在引用符之中的引用符,會吧連續的兩個引用符看作一個雙引用符。也就是說用csvReader讀取的時候,讀取的結果就是會就是
clipboard.png
看吧,沒錯了吧ip

escapechar

doublequote提供了一種,解決若是引用符裏出現引用符問題的文件規範,而你也能夠本身搞一套解決方案,誰說必需要重複一次啊,煩不煩啊,我就不想敲兩次,因而我把doublequote這個參數指定爲False,可是仍是要必須指定點啥玩意來完成這個功能的。這就是這個參數的功能。好比說當咱們吧這個參數指定爲escapechar=':',而當咱們的輸入文件爲
clipboard.png
那麼在用csvReader讀取的時候,因爲第二個引號有一個冒號前綴,那麼讀取的時候就會認爲,第二個冒號是這個表格內就存在的冒號,不是做爲分割符存在的。讀取結果與上一個結果同樣的。ci

在使用reader的時候後,示例代碼以下input

>>> import csv
>>> with open('eggs.csv', newline='') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
...     for row in spamreader:
...         print(', '.join(row))
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam

2.數據寫入

csv.writer(csvfile, dialect='excel', **fmtparams)
關鍵參數與以前同樣,反過來理解就行了
寫入示例代碼以下

import csv
with open('eggs.csv', 'w', newline='') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
相關文章
相關標籤/搜索