網(wǎng)站首頁 編程語言 正文
所謂的CSV(逗號(hào)分隔值)格式是電子表格和數(shù)據(jù)庫最常用的導(dǎo)入和導(dǎo)出格式。
嘗試使用CSV格式進(jìn)行標(biāo)準(zhǔn)化描述之前已經(jīng)使用了很多年。
該csv模塊reader和writer對(duì)象讀取和寫入序列。
程序員還可以使用DictReader和DictWriter類以字典形式讀取和寫入數(shù)據(jù)。
讀取
reader(iterable, dialect=‘excel', *args, **kwargs)
該方法返回一個(gè)reader對(duì)象,該對(duì)象將遍歷給定的iterable中的行。默認(rèn)情況下,從csv文件中讀取的每一行都作為字符串列表返回,除非指定了quoting參數(shù)值為QUOTE_NONNUMERIC。如下:
假設(shè)有這么一個(gè)文件a.csv,內(nèi)容如下:
1,2,3,4
5,6,7,8
9,10,11,12
我們讀取一下這個(gè)csv
import csv with open('a.csv') as f: ? ? reader = csv.reader(f) ? ? print(type(reader), reader) ? ? for item in reader: ? ? ? ? print(type(item), item) ? ? ? ?? ############# 打印結(jié)果如下 ############# <class '_csv.reader'> <_csv.reader object at 0x000002194D601F50> <class 'list'> ['1', '2', '3', '4'] <class 'list'> ['5', '6', '7', '8'] <class 'list'> ['9', '10', '11', '12']
當(dāng)我們?cè)O(shè)置quoting參數(shù)值為QUOTE_NONNUMERIC時(shí):
with open('a.csv') as f: ? ? reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC) ? ? print(type(reader), reader) ? ? for item in reader: ? ? ? ? print(type(item), item) ? ? ? ?? ############# 打印結(jié)果如下 ############# <class '_csv.reader'> <_csv.reader object at 0x000002BFC3291F50> <class 'list'> [1.0, 2.0, 3.0, 4.0] <class 'list'> [5.0, 6.0, 7.0, 8.0] <class 'list'> [9.0, 10.0, 11.0, 12.0]
更多參數(shù)解釋請(qǐng)看下面kwargs參數(shù)
DictReader(f, fieldnames=None, restkey=None, restval=None, dialect=“excel”, *args, **kwds)
創(chuàng)建一個(gè)DictReader對(duì)象,其功能類似于常規(guī)讀取器,但是將每行的信息映射到OrderDict當(dāng)中。
OrderDict的鍵名可由filednames參數(shù)指定,如果未指定,那么將由第一行數(shù)據(jù)作為鍵名;如果數(shù)據(jù)中的字段多于字段名列表,則剩余的數(shù)據(jù)以列表存儲(chǔ)起來,其健名由restkey指定(默認(rèn)為None);如果數(shù)據(jù)中的值少于字段名列表,則缺少的值將默認(rèn)填充為restval設(shè)定的值(默認(rèn)為None)。
with open('a.csv') as f: ? ? reader = csv.DictReader(f) ? ? print(type(reader), reader) ? ? for item in reader: ? ? ? ? print(type(item), item) ############# 打印結(jié)果如下 ############# <class 'csv.DictReader'> <csv.DictReader object at 0x000001F3EE9A8898> <class 'collections.OrderedDict'> OrderedDict([('1', '5'), ('2', '6'), ('3', '7'), ('4', '8')]) <class 'collections.OrderedDict'> OrderedDict([('1', '9'), ('2', '10'), ('3', '11'), ('4', '12')])
設(shè)置了fieldnames情況下:
... reader = csv.DictReader(f, fieldnames=['a', 'b', 'c', 'd']) ... ############# 打印結(jié)果如下 ############# <class 'csv.DictReader'> <csv.DictReader object at 0x00000249BED38898> <class 'collections.OrderedDict'> OrderedDict([('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]) <class 'collections.OrderedDict'> OrderedDict([('a', '5'), ('b', '6'), ('c', '7'), ('d', '8')]) <class 'collections.OrderedDict'> OrderedDict([('a', '9'), ('b', '10'), ('c', '11'), ('d', '12')])
無論是reader對(duì)象還是DictReader對(duì)象,都具有如下操作:
-
__next__()
: 將閱讀器可迭代對(duì)象的下一行作為列表或字典返回 -
dialect
: 獲取閱讀器的dialect描述 -
line_num
: 獲取閱讀器讀取的行數(shù) -
fieldnames
: 獲取鍵名(DictReader對(duì)象獨(dú)有)
更多參數(shù)解釋請(qǐng)看下面kwargs參數(shù)
寫入
writer(fileobj, dialect=‘excel', *args, **kwargs)
將用戶數(shù)據(jù)寫入到指定的文件對(duì)象上,返回一個(gè)writer對(duì)象
import csv # 一定要指定newline='', 否則將會(huì)每行數(shù)據(jù)之間將會(huì)有空行 with open('b.csv', mode='w', newline='') as f: ? ? writer = csv.writer(f) ? ? writer.writerow([1, 2, 3, 4]) ? ? writer.writerow([5, 6, 7, 8])
更多參數(shù)解釋請(qǐng)看下面kwargs參數(shù)
DictWriter(f, fieldnames, restval="", extrasaction=“raise”, dialect=“excel”, *args, **kwds)
將用戶數(shù)據(jù)寫入到指定文件對(duì)象上,但需指定fieldnames(鍵名),返回一個(gè)DictWriter對(duì)象。
如果數(shù)據(jù)中的值少于字段名列表,則缺少的值將默認(rèn)填充為restval設(shè)定的值(默認(rèn)為None)。
import csv # 一定要指定newline='', 否則將會(huì)每行數(shù)據(jù)之間將會(huì)有空行 with open('b.csv', mode='w', newline='') as f: ? ? writer = csv.DictWriter(f, fieldnames=['a', 'b', 'c', 'd']) ? ? writer.writerow({'a': 1, 'b': 2, 'c': 3, 'd': 4}) ? ? writer.writerow({'a': 5, 'b': 6, 'c': 7, 'd': 8})
值得注意的是,默認(rèn)情況下fieldnames數(shù)據(jù)并不會(huì)寫入到文件當(dāng)中!
無論是reader對(duì)象還是DictReader對(duì)象,都具有如下操作:
writerow(rowdict): 將行數(shù)據(jù)寫入到文件對(duì)象 writerows(rowdicts): 所有行數(shù)據(jù)寫入到文件對(duì)象當(dāng)中 import csv with open('b.csv', mode='w', newline='') as f: ? ? writer = csv.writer(f) ? ? writer.writerows([[1, 2, 3, 4], [5, 6, 7, 8]])
-
dialect
: 獲取寫入器的dialect描述 -
writeheader()
: 用fieldnames數(shù)據(jù)寫入一行(DictWriter對(duì)象獨(dú)有)
更多參數(shù)解釋請(qǐng)看下面kwargs參數(shù)
kwargs參數(shù)
delimiter
一個(gè)用于分割字段的分隔符,默認(rèn)為,
lineterminator
行終止符,默認(rèn)為\r\n
quoting
控制何時(shí)引用應(yīng)該由作者產(chǎn)生并被讀者識(shí)別
skipinitialspace
如果設(shè)置為True,分割符后面的空白將被忽略。默認(rèn)為False
""" 假設(shè)a.csv的內(nèi)容如下 1, 2,3,4 """ import csv with open('a.csv') as f: ? ? reader = csv.reader(f) ? ? # reader = csv.reader(f, skipinitialspace=True) ? ? for item in reader: ? ? ? ? print(type(item), item) ############ 默認(rèn)情況,打印如下 ############ <class 'list'> ['1', ' 2', '3', '4'] ############ skipinitialspace=True,打印如下 ############ <class 'list'> ['1', '2', '3', '4']
strict
如果設(shè)置為True,則將csv輸入錯(cuò)誤時(shí)將引發(fā)異常。默認(rèn)為False
更多參數(shù)解釋以及csv模塊的使用,請(qǐng)看:https://docs.python.org/3.7/library/csv.html
原文鏈接:https://blog.csdn.net/y472360651/article/details/113972240
相關(guān)推薦
- 2022-08-28 Spring Boot整合ElasticSearch
- 2022-11-15 如何將Android?Studio卸載干凈_Android
- 2022-06-04 Python正則表達(dá)式中flags參數(shù)的實(shí)例詳解_python
- 2023-03-30 C語言楊氏矩陣簡單實(shí)現(xiàn)方法_C 語言
- 2023-03-20 pip安裝python庫時(shí)報(bào)Failed?building?wheel?for?xxx錯(cuò)誤的解決方法
- 2022-08-23 Shell?腳本自動(dòng)輸入密碼的三種方式小結(jié)_linux shell
- 2022-09-05 python使用pip成功導(dǎo)入庫后還是報(bào)錯(cuò)的解決方法(針對(duì)vscode)_python
- 2022-06-14 C#實(shí)現(xiàn)密碼驗(yàn)證與輸錯(cuò)密碼賬戶鎖定_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 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錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支