Python操作CSV教程_第1頁
Python操作CSV教程_第2頁
Python操作CSV教程_第3頁
Python操作CSV教程_第4頁
Python操作CSV教程_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、使用過 CSV文件都知道:如果我們的電腦中裝了 WPS或 Microsoft Office 的話,.csv 文件默認(rèn)是被Excel打開的,那么什么是CSV文件? CSV 文件與Excel文件有什么區(qū)別?如何通過 Python 來操作CSV文件呢?帶著 這些問題我們接著往下看。 1簡介 1.1 CSVCSV全稱Comma-Separated Values ,中文叫逗號分隔值或字符分隔值,它 以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),其本質(zhì)就是一個(gè)字符序列,可以由 任意數(shù)目的記錄組成,記錄之間以某種換行符分隔,每條記錄由字段組成,通常 所有記錄具有完全相同的字段序列,字段間常用逗號或制表符進(jìn)行分隔。

2、CSV文件格式簡單、通用,在現(xiàn)實(shí)中有著廣泛的應(yīng)用,其中使用最多的是在程序之間轉(zhuǎn) 移表格數(shù)據(jù)。1.2 CSV 與 Excel因?yàn)镃SV文件與Excel文件默認(rèn)都是用Excel工具打開,那他們有什么 區(qū)別呢?我們通過下表簡單了解一下。CSVExcel文件后綴為.csv文件后綴為.xls或.xlsx純文本文件二進(jìn)制文件存儲(chǔ)數(shù)據(jù)/、包含格式、公式等不僅可以存儲(chǔ)數(shù)據(jù),還可以對數(shù)據(jù)進(jìn)行操 作可以通過 Excel工具打開,也可以通過文本編 輯命打開只能通過Excel工具書開只能編寫一次列標(biāo)題每一行中的每一列都有一個(gè)開始標(biāo)記和 結(jié)束標(biāo)記導(dǎo)入數(shù)據(jù)時(shí)消耗內(nèi)存較少導(dǎo)入數(shù)據(jù)時(shí)消耗內(nèi)存較多2基本使用Python通過cs

3、v模塊來實(shí)現(xiàn)CSV格式文件中數(shù)據(jù)的讀寫,該模塊提供了 兼容Excel方式輸出、讀取數(shù)據(jù)文件的功能,這樣我們無需知道Excel所采用 CSV格式的細(xì)節(jié),同樣的它還可以定義其他應(yīng)用程序可用的或特定需求的CSV格式。csv模塊中使用 reader類和 writer類讀寫序列化的數(shù)據(jù),使用DictReader類和DictWriter類以字典的形式讀寫數(shù)據(jù),下面來詳細(xì)看一下相應(yīng)功能。首先來看一下csv模塊常量信息,如下所示:屬性說明QUOTE_ALL指示writer對象給所有字段加上引號QUOTE_MINIMA L,指示writer 對象僅為包含特殊字符(如:定界符、引號字符、行結(jié)束符 等)的字段加上引

4、號QUOTE_NONNL ERICJM旨示writer 對象為所有非數(shù)字字段加上引號QUOTE_NONE指7K writer對象不使用引號引出子段writer(csvfile, dialect='excel', *fmtparams)返回一個(gè) writer 對象,該對象負(fù)責(zé)將用戶的數(shù)據(jù)在給定的文件類對象上 轉(zhuǎn)換為帶分隔符的字符串。csvfile 可以是具有write()方法的任何對象,如果csvfile 是文件對象,則使用newline='' 打開;可選參數(shù)dialect 是用 于不同的CSV變種的特定參數(shù)組;可選關(guān)鍵字參數(shù)fmtparams可以覆寫當(dāng)前變種格式

5、中的單個(gè)格式設(shè)置??聪率纠?import csvwith open( .csvh,newline=f *) as csvfile:writer - csv.writer(csvfile)writer.writerow('id'j 'name'j 'ager)writer .write row ( '11(,張三*222* 并寫入多行# data = 坨311 ,張三、(21,),,李四”, 1')# writer.writerows(data)我們打開文件看一下結(jié)果,如圖所示: reader(csvfile, dialect='

6、excel', *fmtparams)返回一個(gè)reader對象,該對象將逐行遍歷csvfile , csvfile可以是文件對象和列表對象,如果是文件對象要使用newline='' 打開??聪率纠?gt; >> import csv> >> with open( ' test .csv ' , newline-' ' ) as csv-File:> >> reader = csv.radrfesvfilej d電limit巨產(chǎn)='')> >> for ro

7、w in reader:> >>print('> '.join(row)id,nameage31虹.222Iregister_dialect(name, dialect, *fmtparams)將name與dialect 關(guān)聯(lián)起來。name必須是字符串,要指定dialect ,可 以給出Dialect 的子類或給出fmtparams關(guān)鍵字參數(shù),也可以兩者都給出(此 時(shí)關(guān)鍵字參數(shù)會(huì)覆蓋 dialect 參數(shù))。先來看一下 dialect 和fmtparams 詳 細(xì)信息,如下所示:屬性說明delimite r用于分隔字段的單字符,默認(rèn)為逗號doublequ

8、 ote控制出現(xiàn)在字段中的引號字符本身應(yīng)如何被引出,值為 True ,雙寫引號字符, 值為False ,則在引號字符的前面放置轉(zhuǎn)義符,默認(rèn)值為Truequoting控制writer何時(shí)生成引號,以及reader何時(shí)識(shí)別引號lineterm inator放在writer產(chǎn)生的行的結(jié)尾,默認(rèn)為rn'quotecha r一個(gè)單字符,用于包住含有特殊字符(如:引號字符、換行符等)的字段,默認(rèn) 為"'skipinit ialspace值為True ,忽略定界符之后的空格,默認(rèn)為 Falsestrict值為True ,則在輸入錯(cuò)誤的CSV時(shí)拋出Error異常,默認(rèn)值為Falsee

9、scapech ar用于writer 的單子符,在 quoting 設(shè)置為QUOTE_NONE情況下轉(zhuǎn)義止界 符,在doublequote 設(shè)置為False的情況卜轉(zhuǎn)義引號子符,默認(rèn)為 None,表示禁用轉(zhuǎn)義卜面通過一個(gè)示例作進(jìn)一步了解,如下所示:> >> import csv»> csv.registerdialect('mydialecth, delimiter*'|*, quoting-csv.QJOTEALL)> >> with cpen('t電式.cw'newline-'') as c

10、sv-File:>> writer = csv.writerfcsyfilej 'mydidlecf)> » writer»writerow( 'id' ,narneT, 1 ageT )> >> writer ,writeraiw( 1 1601r f '張三 b 222 * )> >> with open(r.csv*j newline="') as csvfile:> >> readier = csv .readen(csvfile, d電limi

11、t電三” 1)> >> for row in reader:> >>print('t .join(row)idr'name',|"age"im|*SKH*,r222,iDictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, *kwds)創(chuàng)建一個(gè)對象,該對象在操作上類似常規(guī)writer ,但會(huì)將字典映射到輸出行,fieldnames參數(shù)是由鍵組成的序列,它指定

12、字典中值的順序,這些值會(huì)按 指定順序傳遞給writerow()方法并寫入文件;如果字典缺少fieldnames中的鍵,則可選參數(shù)restval用于指定要寫入的值;如果傳遞給 writerow() 方法的字典的某些鍵在fieldnames 中找不到,則可選參數(shù)extrasaction 用于指定要執(zhí)行的操作,如果將其設(shè)置為默認(rèn)值'raise',則會(huì)引發(fā)ValueError ,如果將其設(shè)置為'ignore',則字典中的其他鍵值將被忽略;所有其他可選或關(guān) 鍵字參數(shù)都傳遞給底層的 writer 實(shí)例。看下示例:> >> import csv> &g

13、t;> with open('test.csv'j Twr, newlire="1) as csvfile:»> fielctnames = ' id','dgeT> >>writer- = csv,DietWriter-(csv-filefieldname5 = Tieldran>es)> >> wpiten.writeheader()> >>writer, writ eraw (' Id' " 10&1' > (

14、nameh:"張三'ageF; h 21*)> > >writer .writ erow (-1 id 1 :以白 ©2'1t * name * :,李四''age1 : 1 311 )-)> >> with open( *te&t xsv*newline= * ') esv-File : >>> reader = csv.reader(csvfile, delimiter=' >>>for row in reader:> >>p

15、rlnt('.jein(row)Ldnarne, age ie«,5KE>2i1892A至四,典DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, *kwds)創(chuàng)建一個(gè)對象,該對象在操作上類似于常規(guī)reader ,但是將每行中的信息映射到一個(gè)dict,該dict 的鍵由fieldnames(是一個(gè)序列)可選參數(shù)給出,如果省略fieldnames ,則文件第一行中的值將用作字段名;如果某一行中的字 段多于字段名,則其余字段將放入列表中,字段名由

16、restkey 指定(默認(rèn)為Nona ,如果非空白行的字段少于字段名,則缺少的值將用None填充??匆幌率纠?gt; >> Impart csv> >> with open('test.csv', n巨'二g 亡名n干士1點(diǎn):> >>reader = c5v.DictReader (csHile)> >>ior row in reader:A>print(row1 id* , ro1 name' , row .ago-')1691張三211602李四31| Sniffer 類用于推

17、斷CSV文件的格式,該類提供了如下兩個(gè)方法:S sniff(sample, delimiters=None) I分析給定的sample ,如果給出可選的delimiters 參數(shù),則該參數(shù)會(huì)被解釋為 字符串,該字符串包含了可能的有效定界符。has_header(sample) I分析示例文本(假定為CSV格式),如果第一行很可能是一系列列標(biāo)題,則返回 True。該類及方法使用較少,了解即可,下面通過一個(gè)示例簡單了解一下。import csvwith open('test.csv', neuline= r') as csvfile:dialect = csv,5niffe

18、r().sniff(csvfile.read(1G24)csvfile,seek(0)reader = c&¥» reader(csvfilej diwl皂匚tfor row in reader:print(row| Reader 對象Reader對象指DictReader 實(shí)例和reader()函數(shù)返回的對象,下面看一下其公開屬性和方法。_next_()返回reader的可迭代對象的下一行,返回值可能是列表或字典。d dialect Idialect 描述,只讀,供解析器使用。| line_num I源迭代器已經(jīng)讀取了的行數(shù)。 fieldnamesI字段名稱,該屬性為DictReader對象屬性。| Writer 對象Writer對象指DictWriter 實(shí)例和writer

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論