Python之csv模塊

簡(jiǎn)介

csv文件具有格式簡(jiǎn)單掰吕,快速存取果覆,兼容性好等特點(diǎn),工程殖熟、金融局待、商業(yè)等很多數(shù)據(jù)文件都是采用csv文件保存和處理。工作中數(shù)據(jù)處理也用到了csv,簡(jiǎn)要總結(jié)下使用經(jīng)驗(yàn)钳榨,特別是那些由于本地兼容性導(dǎo)致的與官方文檔的差異使用舰罚。
csv(comma Seperated Values)文件的格式非常簡(jiǎn)單,類似一個(gè)文本文檔重绷,每一行保存一條數(shù)據(jù)沸停,同一行中的各個(gè)數(shù)據(jù)通常采用逗號(hào)(或tab)分隔悔叽。

與Python相關(guān)

python自帶了csv模塊浸颓,專門用于處理csv文件的讀取和存檔。
csv模塊中坎藐,主要由兩種方式存取csv文件:函數(shù)方法候醒;類方法能颁。


常用函數(shù)

讀操作

csv.reader(csvfile,dialect ='excel'倒淫,** fmtparams)
返回一個(gè)reader對(duì)象伙菊,它將迭代給定csvfile中的行。
csvfile可以是任何支持迭代器協(xié)議的對(duì)象敌土,并在每次next()調(diào)用其方法時(shí)返回一個(gè)字符串- 文件對(duì)象和列表對(duì)象都是合適的镜硕。如果csvfile是一個(gè)文件對(duì)象,那么它必須在平臺(tái)上以“b”標(biāo)志打開返干,這會(huì)產(chǎn)生影響兴枯。可以給出可選的 dialect 參數(shù)矩欠,該參數(shù)用于定義特定于CSV方言的一組參數(shù)财剖。它可以是類的子類的實(shí)例,也可以是函數(shù)Dialect返回的字符串之一 list_dialects()癌淮。其他可選的fmtparams可以給出關(guān)鍵字參數(shù)來覆蓋當(dāng)前方言中的各個(gè)格式參數(shù)躺坟。

import csv
with open('erroe.csv','rb') as csvred:
    spam = csv.reader(csvred,delimiter=' ', quotechar='|')
    for rem in spam:
        print ','.join(rem)
寫操作

csv.writer(csvfile,dialect ='excel'乳蓄,** fmtparams)
返回一個(gè)編寫器對(duì)象咪橙,負(fù)責(zé)將用戶的數(shù)據(jù)轉(zhuǎn)換為給定的類文件對(duì)象上的分隔字符串。
csvfile可以是帶有write()方法的任何對(duì)象 虚倒。如果csvfile是一個(gè)文件對(duì)象匣摘,那么它必須在平臺(tái)上以“b”標(biāo)志打開,這會(huì)產(chǎn)生影響裹刮。 可以給出可選的dialect參數(shù)音榜,該參數(shù)用于定義特定于CSV方言的一組參數(shù)。它可以是類的子類的實(shí)例捧弃,也可以是函數(shù)Dialect返回的字符串之一 list_dialects()赠叼〔聊遥可以給出其他可選的fmtparams關(guān)鍵字參數(shù)來覆蓋當(dāng)前dialect中的各個(gè)格式參數(shù)。

import csv
with open('error.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
其他
  • csv.register_dialect(name嘴办,[dialect,] ** fmtparams)
    將dialect與name聯(lián)系起來瞬场。 name必須是字符串或Unicode對(duì)象。dialect可以通過傳遞子類Dialect涧郊,或通過fmtparams關(guān)鍵字參數(shù)或兩者來指定贯被,并使用關(guān)鍵字參數(shù)覆蓋dialect的參數(shù)
  • csv.unregister_dialect(name)
    從dialect注冊(cè)表中刪除與名稱關(guān)聯(lián)的dialect。如果name不是已注冊(cè)的dialect名稱妆艘,則引發(fā)An 錯(cuò)誤
  • csv.get_dialect(name)
    返回與name相關(guān)的dialect彤灶。如果name 不是已注冊(cè)的dialect名稱,則引發(fā)An 錯(cuò)誤
  • csv.list_dialects()
    返回所有已注冊(cè)dialect的名稱
  • csv.field_size_limit([new_limit])
    返回解析器允許的當(dāng)前最大字段大小批旺。如果給出new_limit幌陕,則這將成為新限制

常用類

讀操作

class csv.DictReader(f,fieldnames = None汽煮,restkey = None搏熄,restval = None,dialect ='excel'暇赤,* args心例,** kwds)
創(chuàng)建一個(gè)像常規(guī)閱讀器一樣操作的對(duì)象,但將讀取的信息映射到一個(gè)dict鞋囊,其鍵由可選的 fieldnames參數(shù)給出止后。字段名的參數(shù)是一個(gè)序列,其元素與輸入數(shù)據(jù)的順序中的字段相關(guān)聯(lián)失暴。這些元素成為結(jié)果字典的關(guān)鍵坯门。如果省略fieldnames參數(shù)微饥,則文件f的第一行中的將用作字段名逗扒。如果讀取的行包含的字段多于字段名序列,則將剩余數(shù)據(jù)添加為由restkey值鍵入的序列欠橘。如果讀取的行的字段數(shù)少于字段名序列矩肩,則其余的鍵將采用可選的restval參數(shù)的值。任何其他可選或關(guān)鍵字參數(shù)都將傳遞給基礎(chǔ)reader實(shí)例肃续。

import csv
with open('/Users/mioji/Desktop/api_error/error.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['apan'], row['spam'])
寫操作

class csv.DictWriter(f黍檩,fieldnames,restval =''始锚,extrasaction ='raise'刽酱,dialect ='excel',* args瞧捌,** kwds)
創(chuàng)建一個(gè)像常規(guī)編寫器一樣操作的對(duì)象棵里,但將字典映射到輸出行润文。的字段名的參數(shù)是一個(gè)序列識(shí)別在哪些值在傳遞給字典中的順序按鍵的writerow()方法被寫入到文件?F。如果字典缺少字段名中的鍵殿怜,則可選的restval參數(shù)指定要寫入的值典蝌。如果傳遞給方法的字典包含在字段名中找不到的鍵,則可選的extrasaction參數(shù)指示要采取的操作头谜。如果設(shè)置為a 則被提升骏掀。如果設(shè)置為writerow()'raise'ValueError'ignore',字典中的額外值將被忽略柱告。任何其他可選或關(guān)鍵字參數(shù)都將傳遞給基礎(chǔ) writer實(shí)例截驮。
  請(qǐng)注意,與DictReader類不同末荐,它的fieldnames參數(shù)DictWriter不是可選的侧纯。由于Python的dict 對(duì)象沒有排序,因此沒有足夠的信息來推斷應(yīng)該將行寫入文件f的順序甲脏。

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'})
其他
  • class csv.Dialect
    Dialect類是依賴于主要用于它的屬性眶熬,這是用來定義一個(gè)特定的參數(shù)的容器類 reader或writer實(shí)例
  • class csv.excel
    在excel類定義的Excel生成CSV文件的通常的性質(zhì)。它以方言名稱注冊(cè)'excel'块请。
  • class csv.excel_tab
    excel_tab類定義Excel生成的制表符分隔的文件的通常的性質(zhì)娜氏。它以方言名稱注冊(cè)'excel-tab'。
  • class csv.Sniffer
    Sniffer類用來推斷一個(gè)CSV文件的格式墩新。
    Sniffer類提供了兩個(gè)方法:
    sniff(樣本贸弥,分隔符=無):分析給定的樣本并返回Dialect反映找到的參數(shù)的子類。如果給出了可選的delimiters參數(shù)海渊,則將其解釋為包含可能的有效分隔符的字符串绵疲。
    has_header(樣本):分析示例文本(假定為CSV格式), True如果第一行看起來是一系列列標(biāo)題臣疑,則返回盔憨。

常量

  • csv.QUOTE_ALL
    指示writer對(duì)象引用所有字段。
  • csv.QUOTE_MINIMAL
    指示writer對(duì)象只引用那些包含特殊字符讯沈,如字段分隔符郁岩,quotechar或任何字符 lineterminator。
  • csv.QUOTE_NONNUMERIC
    指示writer對(duì)象引用所有非數(shù)字字段缺狠。
    指示讀者將所有非引用字段轉(zhuǎn)換為float類型问慎。
  • csv.QUOTE_NONE
    指示writer對(duì)象永遠(yuǎn)不引用字段。當(dāng)輸出數(shù)據(jù)中出現(xiàn)當(dāng)前 分隔符時(shí)挤茄,它前面是當(dāng)前的escapechar 字符如叼。如果未設(shè)置escapechar,則Error在遇到需要轉(zhuǎn)義的任何字符時(shí)穷劈,編寫器將引發(fā)笼恰。
    指示reader不對(duì)引號(hào)字符執(zhí)行特殊處理片酝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挖腰,隨后出現(xiàn)的幾起案子雕沿,更是在濱河造成了極大的恐慌,老刑警劉巖猴仑,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件审轮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辽俗,警方通過查閱死者的電腦和手機(jī)疾渣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崖飘,“玉大人榴捡,你說我怎么就攤上這事≈煸。” “怎么了吊圾?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長翰蠢。 經(jīng)常有香客問我项乒,道長,這世上最難降的妖魔是什么梁沧? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任檀何,我火速辦了婚禮,結(jié)果婚禮上廷支,老公的妹妹穿的比我還像新娘频鉴。我一直安慰自己,他們只是感情好恋拍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布垛孔。 她就那樣靜靜地躺著,像睡著了一般芝囤。 火紅的嫁衣襯著肌膚如雪似炎。 梳的紋絲不亂的頭發(fā)上辛萍,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天悯姊,我揣著相機(jī)與錄音,去河邊找鬼贩毕。 笑死悯许,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辉阶。 我是一名探鬼主播先壕,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼瘩扼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了垃僚?” 一聲冷哼從身側(cè)響起集绰,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谆棺,沒想到半個(gè)月后栽燕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡改淑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年碍岔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朵夏。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蔼啦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仰猖,到底是詐尸還是另有隱情捏肢,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布饥侵,位于F島的核電站猛计,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏爆捞。R本人自食惡果不足惜奉瘤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煮甥。 院中可真熱鬧盗温,春花似錦、人聲如沸成肘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽双霍。三九已至砚偶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洒闸,已是汗流浹背染坯。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丘逸,地道東北人单鹿。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像深纲,于是被迫代替她去往敵國和親仲锄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劲妙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容