python 加速csv读取速度_python读写csv文件

本文介绍了如何使用Python的csv模块高效地读取和写入CSV文件。内容包括csv.reader和csv.writer的使用,如何设置引号模式,以及利用DictReader和DictWriter将行转换为字典,便于数据操作。
摘要由CSDN通过智能技术生成

csv释义

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。

读取csv文件

reader(filename),可以使用reader()方法来创建一个对象从csv文件中读取数据。

官方文档:csv.reader(csvfile, dialect='excel', **fmtparams)  //csvfile是任何可以迭代的对象(如果是文件对象则用newline=''来打开它),dialect翻译为方言用于定制解析器来解析数据,**fmtparams为解析器参数

读文件时,输入数据的每一行都会解析,并返回一个列表

创建一个csv文件写入如下数据,python读取:

c49d5079afa41e108b5bd0814cea83ef08b.jpg

>>> with open('test.csv','r',newline='') as csvfile:

... reader=csv.reader(csvfile)>>> for i inreader:

...print(i)

...

['name', 'tel', 'address', 'age']

['zhang', '15111111111', 'beijing', '33']

['li', '13822222222', 'wuhan', '28']

['liu', '15933333333', 'hainan', '25']

写csv文件

writer(filename),使用writer方法来写数据

csv.writer(csvfile, dialect='excel', **fmtparams)  //参数与读完全基本相同

写一段代码来测试

importcsv

with open('test1.csv','w',newline='') as f:

writer=csv.writer(f)

writer.writerow(('name', 'tel', 'address', 'age'))

writer.writerow(('zhang', 15111111111, 'beijing', 33))

writer.writerow(('li', 13822222222, 'wuhan', 28))

writer.writerow(('liu', 15933333333, 'hainan', 25))

with open('test1.csv','r',newline='') as f:

reader=csv.reader(f)for i inreader:print(i)

结果:

['name', 'tel', 'address', 'age']

['zhang', '15111111111', 'beijing', '33']

['li', '13822222222', 'wuhan', '28']

['liu', '15933333333', 'hainan', '25']

发现结果与输入不同,默认引号模式的原因

写文件时可用quoting来设置引号模式

默认为:writer = csv.writer(f,quoting=csv.QUOTE_NONNUMERIC)  //非数字加引号

可改为:

QUOTE_ALL:所有字段加引号

QUOTE_MINIMAL:特殊字段加引号

QUOTE_NONE:都不加引号

方言

用于定制解析器,无需将各个参数单独传入阅读器和书写器,可以组成一起构成一个方言对象

标准库包括两个方言:excel和excel-tabs,默认为excel

csv方言参数:

属性

默认值

含义

delimiter

,

字段分隔符

doublequote

True

控制quotechar实例是否成对

escapechar

None

指示一个转义序列

lineterminator

\r\n

书写器使用这个结束一行

quotechar

"

用来包围含特殊字符的字段

quoting

QUOTE_MINIMAL

控制引号行为

skipinitialspace

False

忽略字符定界符前的空白符

将”行“转换为字典

DictReader和DictWriter类将行转化为字典而非行

官方文档:class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

参数说明:

fieldnames:字典的键,默认为第一行数据

restkey:若所读行字段多余给出的键个数,剩余键由restkey给出

restkey:若所读行字段少于给出的键个数,剩余值由restval给出

例如上述test1.csv文件

with open('test1.csv','r',newline='') as f:

reader=csv.DictReader(f)for i inreader:print(i)

结果:

{'address': 'beijing', 'name': 'zhang', 'age': '33', 'tel': '15111111111'}

{'address': 'wuhan', 'name': 'li', 'age': '28', 'tel': '13822222222'}

{'address': 'hainan', 'name': 'liu', 'age': '25', 'tel': '15933333333'}

DictWriter类似DictReader,提供一个列表作为键

writer = csv.DictWriter(f,list)

官方文档:class csv.Dictwriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

更多详细解释可访问python标准库

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值