Python CSV模塊簡(jiǎn)介

CSV<a id="sec-1" name="sec-1"></a>

csv文件格式是一種通用的電子表格和數(shù)據(jù)庫(kù)導(dǎo)入導(dǎo)出格式。最近我調(diào)用RPC處理服務(wù)器數(shù)據(jù)時(shí),經(jīng)常需要將數(shù)據(jù)做個(gè)存檔便使用了這一方便的格式。

簡(jiǎn)介<a id="sec-1-1" name="sec-1-1"></a>

Python csv模塊封裝了常用的功能,使用的簡(jiǎn)單例子如下:

# 讀取csv文件
import csv
with open('some.csv', 'rb') as f:        # 采用b的方式處理可以省去很多問(wèn)題
    reader = csv.reader(f)
    for row in reader:
        # do something with row, such as row[0],row[1]


import csv
with open('some.csv', 'wb') as f:      # 采用b的方式處理可以省去很多問(wèn)題
    writer = csv.writer(f)
    writer.writerows(someiterable)

默認(rèn)的情況下, 讀和寫使用逗號(hào)做分隔符(delimiter),用雙引號(hào)作為引用符(quotechar),當(dāng)遇到特殊情況是,可以根據(jù)需要手動(dòng)指定字符, 例如:

import csv
with open('passwd', 'rb') as f:
    reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
    for row in reader:
        print row

上述示例指定冒號(hào)作為分隔符,并且指定quote方式為不引用。這意味著讀的時(shí)候都認(rèn)為內(nèi)容是不被默認(rèn)引用符(")包圍的。quoting的可選項(xiàng)為: QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONNUMERIC, QUOTE_NONE.

有點(diǎn)需要注意的是,當(dāng)用writer寫數(shù)據(jù)時(shí), None 會(huì)被寫成空字符串,浮點(diǎn)類型會(huì)被調(diào)用 repr() 方法轉(zhuǎn)化成字符串。所以非字符串類型的數(shù)據(jù)會(huì)被 str() 成字符串存儲(chǔ)。所以當(dāng)涉及到unicode字符串時(shí),可以自己手動(dòng)編碼后存儲(chǔ)或者使用csv提供的 UnicodeWriter, 具體可參見這里

字典方式地讀寫<a id="sec-1-2" name="sec-1-2"></a>

csv還提供了一種類似于字典方式的讀寫,方式如下:

格式如下:

class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

其中fieldnames指定字典的key值,如果reader里沒有指定那么默認(rèn)第一行的元素,在writer里一定要指定這個(gè)。

使用示例

# 讀
>>> import csv
>>> with open('names.csv') as csvfile:
...     reader = csv.DictReader(csvfile)
...     for row in reader:
...         print(row['first_name'], row['last_name'])
...
Baked Beans
Lovely Spam
Wonderful Spam


# 寫

import csv
with open('names.csv', 'w') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

其它<a id="sec-1-3" name="sec-1-3"></a>

csv模塊還涉及了其它的概念,比如 Dialects, 還提供了供錯(cuò)誤處理的 exception csv.Error 等,因?yàn)閷?shí)際使用較少及就不累贅在此。更多參考官方文檔。

參考資料<a id="sec-2" name="sec-2"></a>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容