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
等。