python操作csv格式文件之csv.DictReader()方法
簡(jiǎn)單使用csv.DictReader()方法
示例代碼1:
import csv
f = open('sample','r',encoding='utf8')
reader = csv.DictReader(f)
print(reader) # <csv.DictReader object at 0x000002241D730FD0>
for line in reader: # reader為了方便理解我們可以把它看成是一個(gè)列表嵌套OrderedDict(一種長(zhǎng)相類(lèi)似于列表的數(shù)據(jù)類(lèi)型)
? ? print(line) # OrderedDict([('id', '1'), ('name', 'jason'), ('age', '18')])?sample為一個(gè)txt文件,文件內(nèi)容如下:
id,name,age 1,jason,18 2,jian,20 3,xiaoming,30 4,dog,40
代碼運(yùn)行在終端輸出的結(jié)果為:
<csv.DictReader object at 0x000001FCF6FA0FD0> # 來(lái)自于示例代碼1中的print(reader)
OrderedDict([('id', '1'), ('name', 'jason'), ('age', '18')]) # 來(lái)自于示例代碼1中的print(line)
1 jason 18 # 來(lái)自于示例代碼1中的print(line['id'],line['name'],line['age'])
OrderedDict([('id', '2'), ('name', 'jian'), ('age', '20')])
2 jian 20
OrderedDict([('id', '3'), ('name', 'xiaoming'), ('age', '30')])
3 xiaoming 30
OrderedDict([('id', '4'), ('name', 'dog'), ('age', '40')])
4 dog 40
OrderedDict是一種長(zhǎng)相類(lèi)似于列表的數(shù)據(jù)類(lèi)型,該列表中嵌套著元組例:line = OrderedDict([('id', '1'), ('name', 'jason'), ('age', '18')]),每個(gè)元組中的第一個(gè)元素為鍵,第二個(gè)元素為值(類(lèi)似于字典),每個(gè)元組中的鍵是哪里來(lái)的呢?==默認(rèn)情況下(可以自己設(shè)置的)==csv.DictReader()讀到的第一行數(shù)據(jù)就是鍵。并且可以通過(guò)索引的方法來(lái)取出OrderedDict數(shù)據(jù)中的值print(line['id'],line['name'],line['age']) # 可以通過(guò)鍵進(jìn)行索引取值(類(lèi)似于字典)。
使用csv.DictReader()之fieldnames參數(shù)
在reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age'])中添加參數(shù)fieldnames=['new_id','new_name','new_age']用來(lái)指定鍵。
示例代碼2:
import csv
f = open('sample','r',encoding='utf8')
# 通過(guò)fieldnames參數(shù)指定字段
reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age'])
head_row = next(reader) # next()方法用于移動(dòng)指針
print(reader) # <csv.DictReader object at 0x000002241D730FD0>
for line in reader: # reader為了方便理解我們可以把它看成是一個(gè)列表嵌套OrderedDict(一種長(zhǎng)相類(lèi)似于列表的數(shù)據(jù)類(lèi)型)
? ? print(line) # OrderedDict([('new_id', '2'), ('new_name', 'jian'), ('new_age', '20')])?
? ? # 通過(guò)指定的字段進(jìn)行索引取值并打印輸出
? ? print(line['new_id'],line['new_name'],line['new_age']) # 可以通過(guò)鍵進(jìn)行索引取值(類(lèi)似于字典)next()方法用于移動(dòng)指針,示例代碼2中的head_row = next(reader)獲取的是第一行數(shù)據(jù)存儲(chǔ)在head_row中,執(zhí)行一次next()指針移動(dòng)一行,此時(shí)指針已經(jīng)移動(dòng)到了第二行開(kāi)頭,再次讀數(shù)據(jù)的時(shí)候,就從第二行開(kāi)始讀取。如果不執(zhí)行head_row = next(reader)則輸出中還會(huì)多出這樣的結(jié)果OrderedDict([('new_id', 'id'), ('new_name', 'name'), ('new_age', 'age')])第一行數(shù)據(jù)也被算在了其中。
代碼運(yùn)行在終端輸出的結(jié)果為:
<csv.DictReader object at 0x000001D329CF2080> # 來(lái)自于示例代碼2的print(reader)
OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18')]) # 來(lái)自于示例代碼2的print(line)
1 jason 18 # 來(lái)自于示例代碼2的print(line['new_id'],line['new_name'],line['new_age'])
OrderedDict([('new_id', '2'), ('new_name', 'jian'), ('new_age', '20')])
2 jian 20
OrderedDict([('new_id', '3'), ('new_name', 'xiaoming'), ('new_age', '30')])
3 xiaoming 30
OrderedDict([('new_id', '4'), ('new_name', 'dog'), ('new_age', '40')])
4 dog 40
使用csv.DictReader()之restkey參數(shù)
如果讀取的行具有比鍵名序列更多的值,此時(shí)則會(huì)將剩余的數(shù)據(jù)作為值添加到restkey中的鍵下面。此時(shí)我們修改sample文件多添加一列數(shù)據(jù)。
在reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age'],restkey='hobby')中添加restkey='hobby'用來(lái)指定接收多余值的鍵,并且要注意restkey只能傳入一個(gè)值,不能傳入列表,元組數(shù)據(jù)類(lèi)型。
sample為一個(gè)txt文件,文件內(nèi)容如下:
id,name,age 1,jason,18,dbj 2,jian,20,lol 3,xiaoming,30,game 4,dog,40,noting
示例代碼3:
import csv
f = open('sample','r',encoding='utf8')
# 通過(guò)fieldnames參數(shù)指定字段,超出fieldnames中鍵數(shù)量的值,用restkey中的鍵來(lái)接收
reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age'],restkey='hobby')
head_row = next(reader) # next用于移動(dòng)指針
print(reader) # <csv.DictReader object at 0x000002241D730FD0>
for line in reader: # reader為了方便理解我們可以把它看成是一個(gè)列表嵌套OrderedDict(一種長(zhǎng)相類(lèi)似于列表的數(shù)據(jù)類(lèi)型)
? ? print(line) # OrderedDict([('new_id', '2'), ('new_name', 'jian'), ('new_age', '20')])?
? ? # 通過(guò)指定的字段進(jìn)行索引取值并打印輸出
? ? print(line['new_id'],line['new_name'],line['new_age'],line['hobby']) # 可以通過(guò)鍵進(jìn)行索引取值(類(lèi)似于字典)代碼運(yùn)行在終端輸出的結(jié)果為:
<csv.DictReader object at 0x000001CB6B6030F0> # 來(lái)自于示例代碼3的print(reader)
OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18'), ('hobby', ['dbj'])]) # 來(lái)自于示例代碼3的print(line)
1 jason 18 # 來(lái)自于示例代碼3的print(line['new_id'],line['new_name'],line['new_age'])
OrderedDict([('new_id', '2'), ('new_name', 'jian'), ('new_age', '20'), ('hobby', ['lol'])])
2 jian 20
OrderedDict([('new_id', '3'), ('new_name', 'xiaoming'), ('new_age', '30'), ('hobby', ['game'])])
3 xiaoming 30
OrderedDict([('new_id', '4'), ('new_name', 'dog'), ('new_age', '40'), ('hobby', ['noting'])])
4 dog 40
從代碼運(yùn)行結(jié)果中我們會(huì)發(fā)現(xiàn)多出來(lái)的值,確實(shí)使用restkey指定的鍵restkey='hobby'來(lái)接收了OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18'), ('hobby', ['dbj'])])
注意雖然多余的鍵可以用restkey指定的鍵接收,但是卻無(wú)法通過(guò)索引打印出來(lái),也就是執(zhí)行print(line["hobby"])的話就會(huì)報(bào)錯(cuò)KeyError: 'hobby'。
使用csv.DictReader()之restval參數(shù)
如果讀取的行具有比鍵名序列更少的值,此時(shí)剩余的鍵則會(huì)使用可選參數(shù)restval中的值。此時(shí)我們修改sample文件多添加一列數(shù)據(jù)。
在reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age','hobby'],restval='others')中添加restval='others'用來(lái)指定鍵對(duì)應(yīng)值為空時(shí)的默認(rèn)值,并且要注意restval也只能傳入一個(gè)值,不能傳入列表,元組數(shù)據(jù)類(lèi)型。
sample為一個(gè)txt文件,文件內(nèi)容如下:
id,name,age 1,jason,18 2,jian,20,lol 3,xiaoming,30 4,dog,40,noting
示例代碼4:
import csv
f = open('sample','r',encoding='utf8')
# 通過(guò)fieldnames參數(shù)指定字段,超出fieldnames中鍵數(shù)量的值,用restkey中的鍵來(lái)接收
reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age','hobby'],restval='others')
head_row = next(reader) # next用于移動(dòng)指針
# print(reader) # <csv.DictReader object at 0x000002241D730FD0>
for line in reader: # reader為了方便理解我們可以把它看成是一個(gè)列表嵌套OrderedDict(一種長(zhǎng)相類(lèi)似于列表的數(shù)據(jù)類(lèi)型)
? ? print(line) # OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18'), ('hobby', 'others')])?
? ? # 通過(guò)指定的字段進(jìn)行索引取值并打印輸出
? ? print(line['new_id'],line['new_name'],line['new_age'],line['hobby']) # 可以通過(guò)鍵進(jìn)行索引取值(類(lèi)似于字典)代碼運(yùn)行在終端輸出的結(jié)果為:
OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18'), ('hobby', 'others')]) # 來(lái)自于示例代碼4的print(line)
1 jason 18 others # 來(lái)自于示例代碼4的print(line['new_id'],line['new_name'],line['new_age'],line['hobby'])
OrderedDict([('new_id', '2'), ('new_name', 'jian'), ('new_age', '20'), ('hobby', 'lol')])
2 jian 20 lol
OrderedDict([('new_id', '3'), ('new_name', 'xiaoming'), ('new_age', '30'), ('hobby', 'others')])3 xiaoming 30 others
OrderedDict([('new_id', '4'), ('new_name', 'dog'), ('new_age', '40'), ('hobby', 'noting')])
4 dog 40 noting
到此這篇關(guān)于python操作csv格式文件之csv.DictReader()方法的文章就介紹到這了,更多相關(guān)python csv.DictReader方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳細(xì)過(guò)程帶你用Python做車(chē)牌自動(dòng)識(shí)別系統(tǒng)
這篇文章主要介紹了帶你用Python做車(chē)牌自動(dòng)識(shí)別系統(tǒng)的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Python+wxPython實(shí)現(xiàn)自動(dòng)生成PPTX文檔程序
這篇文章主要介紹了如何使用 wxPython 模塊和 python-pptx 模塊來(lái)編寫(xiě)一個(gè)程序,用于生成包含首頁(yè)、內(nèi)容頁(yè)和感謝頁(yè)的 PPTX 文檔,感興趣的小伙伴可以學(xué)習(xí)一下2023-08-08
python+selenium識(shí)別驗(yàn)證碼并登錄的示例代碼
本篇文章主要介紹了python+selenium識(shí)別驗(yàn)證碼并登錄的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
Python?pyecharts數(shù)據(jù)可視化實(shí)例詳解
PyEcharts是一個(gè)用于生成?Echarts圖表的類(lèi)庫(kù),?Python是一門(mén)富有表達(dá)力的語(yǔ)言,很適合用于數(shù)據(jù)處理,下面這篇文章主要給大家介紹了關(guān)于Python?pyecharts數(shù)據(jù)可視化的相關(guān)資料,需要的朋友可以參考下2022-05-05
Python數(shù)據(jù)可視化之matplotlib.pyplot繪圖的基本參數(shù)詳解
matplotlib.pyplot模塊是一個(gè)功能強(qiáng)大的畫(huà)圖模塊,可以對(duì)畫(huà)圖的多個(gè)參數(shù)進(jìn)行調(diào)整,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)可視化之matplotlib.pyplot繪圖基本參數(shù)的相關(guān)資料,需要的朋友可以參考下2022-04-04
Flask框架使用DBUtils模塊連接數(shù)據(jù)庫(kù)操作示例
這篇文章主要介紹了Flask框架使用DBUtils模塊連接數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了flask框架使用DBUtils模塊連接數(shù)據(jù)庫(kù)的常見(jiàn)操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-07-07
淺析python連接數(shù)據(jù)庫(kù)的重要事項(xiàng)
這篇文章主要介紹了python連接數(shù)據(jù)庫(kù)的重要事項(xiàng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
如何使用python檢測(cè)某網(wǎng)盤(pán)鏈接是否有效
這篇文章主要為大家介紹了使用python檢測(cè)某網(wǎng)盤(pán)鏈接是否有效的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

