Title,Release Date,Director And Now For Something Completely Different,1971,Ian MacNaughton Monty Python And The Holy Grail,1975,Terry Gilliam and Terry Jones Monty Python's Life Of Brian,1979,Terry Jones Monty Python Live At The Hollywood Bowl,1982,Terry Hughes Monty Python's The Meaning Of Life,1983,Terry Jones
csv可以比較方便的在不同應(yīng)用之間遷移數(shù)據(jù)??梢詫?shù)據(jù)批量導(dǎo)出為csv格式,然后倒入到其他應(yīng)用程序中。很多應(yīng)用中需要導(dǎo)出報表,也通常用csv格式導(dǎo)出,然后用Excel工具進行后續(xù)編輯。
打印發(fā)行日期及標(biāo)題,逐行處理:
for line in open("samples/sample.csv"): title, year, director = line.split(",") print year, title
使用csv模塊處理:
import csv reader = csv.reader(open("samples/sample.csv")) for title, year, director in reader: print year, title
改變分隔符
創(chuàng)建一csv.excel的子類,并修改分隔符為”;”
# File: csv-example-2.py import csv class SKV(csv.excel): # like excel, but uses semicolons delimiter = ";" csv.register_dialect("SKV", SKV) reader = csv.reader(open("samples/sample.skv"), "SKV") for title, year, director in reader: print year, title
如果僅僅僅是改變一兩個參數(shù),則可以直接在reader參數(shù)中設(shè)置,如下:
# File: csv-example-3.py import csv reader = csv.reader(open("samples/sample.skv"), delimiter=";") for title, year, director in reader: print year, title
將數(shù)據(jù)存為CSV格式
通過csv.writer來生成一csv文件。
# File: csv-example-4.py import csv import sys data = [ ("And Now For Something Completely Different", 1971, "Ian MacNaughton"), ("Monty Python And The Holy Grail", 1975, "Terry Gilliam, Terry Jones"), ("Monty Python's Life Of Brian", 1979, "Terry Jones"), ("Monty Python Live At The Hollywood Bowl", 1982, "Terry Hughes"), ("Monty Python's The Meaning Of Life", 1983, "Terry Jones") ] writer = csv.writer(sys.stdout) for item in data: writer.writerow(item)
實例
下面我們來看一個比較完整的例子,代碼說明在注釋中:
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文件的格式,不是很準(zhǔn)確 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)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com