網(wǎng)站首頁 編程語言 正文
簡單使用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為了方便理解我們可以把它看成是一個列表嵌套OrderedDict(一種長相類似于列表的數(shù)據(jù)類型)
? ? print(line) # OrderedDict([('id', '1'), ('name', 'jason'), ('age', '18')])?
sample為一個txt文件,文件內(nèi)容如下:
id,name,age
1,jason,18
2,jian,20
3,xiaoming,30
4,dog,40
代碼運行在終端輸出的結(jié)果為:
<csv.DictReader object at 0x000001FCF6FA0FD0>?? ?# 來自于示例代碼1中的print(reader)
OrderedDict([('id', '1'), ('name', 'jason'), ('age', '18')])?? ?# 來自于示例代碼1中的print(line)
1 jason 18?? ?# 來自于示例代碼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是一種長相類似于列表的數(shù)據(jù)類型,該列表中嵌套著元組例:line = OrderedDict([('id', '1'), ('name', 'jason'), ('age', '18')]),每個元組中的第一個元素為鍵,第二個元素為值(類似于字典),每個元組中的鍵是哪里來的呢?==默認(rèn)情況下(可以自己設(shè)置的)==csv.DictReader()讀到的第一行數(shù)據(jù)就是鍵。并且可以通過索引的方法來取出OrderedDict數(shù)據(jù)中的值print(line['id'],line['name'],line['age']) # 可以通過鍵進行索引取值(類似于字典)。
使用csv.DictReader()之fieldnames參數(shù)
在reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age'])中添加參數(shù)fieldnames=['new_id','new_name','new_age']用來指定鍵。
示例代碼2:
import csv
f = open('sample','r',encoding='utf8')
# 通過fieldnames參數(shù)指定字段
reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age'])
head_row = next(reader) # next()方法用于移動指針
print(reader) # <csv.DictReader object at 0x000002241D730FD0>
for line in reader: # reader為了方便理解我們可以把它看成是一個列表嵌套OrderedDict(一種長相類似于列表的數(shù)據(jù)類型)
? ? print(line) # OrderedDict([('new_id', '2'), ('new_name', 'jian'), ('new_age', '20')])?
? ? # 通過指定的字段進行索引取值并打印輸出
? ? print(line['new_id'],line['new_name'],line['new_age']) # 可以通過鍵進行索引取值(類似于字典)
next()方法用于移動指針,示例代碼2中的head_row = next(reader)獲取的是第一行數(shù)據(jù)存儲在head_row中,執(zhí)行一次next()指針移動一行,此時指針已經(jīng)移動到了第二行開頭,再次讀數(shù)據(jù)的時候,就從第二行開始讀取。如果不執(zhí)行head_row = next(reader)則輸出中還會多出這樣的結(jié)果OrderedDict([('new_id', 'id'), ('new_name', 'name'), ('new_age', 'age')])第一行數(shù)據(jù)也被算在了其中。
代碼運行在終端輸出的結(jié)果為:
<csv.DictReader object at 0x000001D329CF2080>?? ?# 來自于示例代碼2的print(reader)?
OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18')])?? ?# 來自于示例代碼2的print(line)
1 jason 18?? ?# 來自于示例代碼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ù)據(jù)作為值添加到restkey中的鍵下面。此時我們修改sample文件多添加一列數(shù)據(jù)。
在reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age'],restkey='hobby')中添加restkey='hobby'用來指定接收多余值的鍵,并且要注意restkey只能傳入一個值,不能傳入列表,元組數(shù)據(jù)類型。
sample為一個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')
# 通過fieldnames參數(shù)指定字段,超出fieldnames中鍵數(shù)量的值,用restkey中的鍵來接收
reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age'],restkey='hobby')
head_row = next(reader) # next用于移動指針
print(reader) # <csv.DictReader object at 0x000002241D730FD0>
for line in reader: # reader為了方便理解我們可以把它看成是一個列表嵌套OrderedDict(一種長相類似于列表的數(shù)據(jù)類型)
? ? print(line) # OrderedDict([('new_id', '2'), ('new_name', 'jian'), ('new_age', '20')])?
? ? # 通過指定的字段進行索引取值并打印輸出
? ? print(line['new_id'],line['new_name'],line['new_age'],line['hobby']) # 可以通過鍵進行索引取值(類似于字典)
代碼運行在終端輸出的結(jié)果為:
<csv.DictReader object at 0x000001CB6B6030F0>?? ?# 來自于示例代碼3的print(reader)?
OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18'), ('hobby', ['dbj'])]) # 來自于示例代碼3的print(line)
1 jason 18?? ?# 來自于示例代碼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
從代碼運行結(jié)果中我們會發(fā)現(xiàn)多出來的值,確實使用restkey指定的鍵restkey='hobby'來接收了OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18'), ('hobby', ['dbj'])])
注意雖然多余的鍵可以用restkey指定的鍵接收,但是卻無法通過索引打印出來,也就是執(zhí)行print(line["hobby"])的話就會報錯KeyError: 'hobby'。
使用csv.DictReader()之restval參數(shù)
如果讀取的行具有比鍵名序列更少的值,此時剩余的鍵則會使用可選參數(shù)restval中的值。此時我們修改sample文件多添加一列數(shù)據(jù)。
在reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age','hobby'],restval='others')中添加restval='others'用來指定鍵對應(yīng)值為空時的默認(rèn)值,并且要注意restval也只能傳入一個值,不能傳入列表,元組數(shù)據(jù)類型。
sample為一個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')
# 通過fieldnames參數(shù)指定字段,超出fieldnames中鍵數(shù)量的值,用restkey中的鍵來接收
reader = csv.DictReader(f,fieldnames=['new_id','new_name','new_age','hobby'],restval='others')
head_row = next(reader) # next用于移動指針
# print(reader) # <csv.DictReader object at 0x000002241D730FD0>
for line in reader: # reader為了方便理解我們可以把它看成是一個列表嵌套OrderedDict(一種長相類似于列表的數(shù)據(jù)類型)
? ? print(line) # OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18'), ('hobby', 'others')])?
? ? # 通過指定的字段進行索引取值并打印輸出
? ? print(line['new_id'],line['new_name'],line['new_age'],line['hobby']) # 可以通過鍵進行索引取值(類似于字典)
代碼運行在終端輸出的結(jié)果為:
OrderedDict([('new_id', '1'), ('new_name', 'jason'), ('new_age', '18'), ('hobby', 'others')]) ?# 來自于示例代碼4的print(line)
1 jason 18 others ?# 來自于示例代碼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
原文鏈接:https://blog.csdn.net/booze_/article/details/121525660
相關(guān)推薦
- 2022-10-31 R語言中set.seed()函數(shù)的作用詳解_R語言
- 2023-02-04 Go語言并發(fā)之原子操作詳解_Golang
- 2022-07-04 Python處理mat文件的三種方式小結(jié)_python
- 2022-07-11 python利用多線程+隊列技術(shù)爬取中介網(wǎng)互聯(lián)網(wǎng)網(wǎng)站排行榜_python
- 2021-11-25 vc控制臺程序關(guān)閉事件時的處理方式及注意點詳解_C 語言
- 2023-04-01 C++11中的智能指針和垃圾回收使用_C 語言
- 2023-02-12 JetpackCompose?Navigation導(dǎo)航實現(xiàn)流程_Android
- 2022-02-27 解決 idea突然使用debug功能時項目啟動一半卡住沒反應(yīng)也不報錯
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支