csv可以比較方便的在不同應用之間遷移數(shù)據(jù)??梢詫?shù)據(jù)批量導出為csv格式,然后倒入到其他應用程序中。很多應用中需要導出報表,也通常用csv格式導出,然后用Excel工具進行后續(xù)編輯。
import csv
# dialect是訪問csv文件時需要指定的參數(shù)之一,用來確定csv文件的數(shù)據(jù)格式
# 下面這個函數(shù)列舉系統(tǒng)支持的dialect有哪些,默認值是'excel',用戶也可
# 以從Dialect派生一個類,使用該類的實例作為dialect參數(shù)。print csv.list_dialects()
def test_writer():
# csv文件必須以二進制方式open
with open('eggs.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile)
spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
def test_reader():
with open('eggs.csv', 'rb') as csvfile:
spamreader = csv.reader(csvfile)
for row in spamreader:
print row
# sniffer 用來推斷csv文件的格式,不是很準確
def test_sniffer():
with open('eggs.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ')
spamwriter.writerow(['Spam'] * 2 + ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
# 通常你需要指定與寫入者相同的文件格式才能正確的讀取數(shù)據(jù)
with open('eggs.csv', 'rb') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ')
for row in spamreader: print ', '.join(row)
# 如果不知道文件格式,sniffer就可以派上用場了
with open('eggs.csv', 'rb') as csvfile:
# 用sniffer推斷文件格式,從而得到dialect
dialect = csv.Sniffer().sniff(csvfile.read(1024)) print dialect.delimiter, dialect.quotechar
# 文件重新移動到頭部
csvfile.seek(0)
# 用推斷出來的dialect創(chuàng)建reader
reader = csv.reader(csvfile, dialect) for row in reader:
print ', '.join(row)