天天看點

Python CSV子產品簡介 CSV 參考資料

Table of Contents

  • 1. CSV
    • 1.1. 簡介
    • 1.2. 字典方式地讀寫
    • 1.3. 其它
  • 2. 參考資料

CSV

csv檔案格式是一種通用的電子表格和資料庫導入導出格式。最近我調用RPC處理伺服器資料時,經常需要将資料做個存檔便使用了這一友善的格式。

簡介

Python csv子產品封裝了常用的功能,使用的簡單例子如下:

# 讀取csv檔案
import csv
with open('some.csv', 'rb') as f:        # 采用b的方式處理可以省去很多問題
    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的方式處理可以省去很多問題
    writer = csv.writer(f)
    writer.writerows(someiterable)
           

預設的情況下, 讀和寫使用逗号做分隔符(delimiter),用雙引号作為引用符(quotechar),當遇到特殊情況是,可以根據需要手動指定字元, 例如:

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

上述示例指定冒号作為分隔符,并且指定quote方式為不引用。這意味着讀的時候都認為内容是不被預設引用符(")包圍的。quoting的可選項為: 

QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONNUMERIC, QUOTE_NONE

.

有點需要注意的是,當用writer寫資料時, 

None

 會被寫成空字元串,浮點類型會被調用 

repr()

 方法轉化成字元串。是以非字元串類型的資料會被 

str()

 成字元串存儲。是以當涉及到unicode字元串時,可以自己手動編碼後存儲或者使用csv提供的 

UnicodeWriter

, 具體可參見這裡。

字典方式地讀寫

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裡沒有指定那麼預設第一行的元素,在writer裡一定要指定這個。

使用示例

# 讀
>>> 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'})
           

其它

csv子產品還涉及了其它的概念,比如 

Dialects

, 還提供了供錯誤處理的 

exception csv.Error

 等,因為實際使用較少及就不累贅在此。更多參考官方文檔。

參考資料

  • https://docs.python.org/2/library/csv.html