python读取csv文件_Python读取CVS文件不够灵活?那是没用对,来看看这5招!

ef8dc551009dc76c030deb051013f456.png


Python是目前最火的语言之一,无论是做开发、测试、数据分析、后端,还是办公自动化,都可以帮你轻松解决一些重复琐碎的工作。而在日常的工作中,经常会打交道的就是文件的处理,其中CSV文件又是经常使用到的一种格式。

今天我们就给大家分享5招,让你能优雅地读取CSV文件。

先来看一下一个典型的数据集stocks.csv:

018d57883ce0a4fc9ad9c3c2da55678d.png

这是一个股票的数据集,就是常见的表格数据,有股票代码,价格,日期,时间,价格变动和成交量。你也可以自己创建一个数据集,只要有自己的表头和数据即可。

第一招:简单的读取

我们先来看一种简单读取方法,先用csv.reader()函数读取文件的句柄f生成一个csv的句柄,其实就是一个迭代器,我们看一下这个reader的源码:

5e964962799af2673ad2d69c8d76c608.png

传给reader一个可迭代对象或者是文件的object,然后返回一个可迭代对象。

a77565e6d85824fa32a2e29fb8fd04b9.png

  • 首先读取csv 文件,然后用csv.reader生成一个csv迭代器f_csv
  • 然后利用迭代器的特性,next(f_csv)获取csv文件的头,也就是表格数据的头
  • 接着利用for循环,一行一行打印row的内容,也就是表格数据的身体

2d0c78a6588d76a4b760729959879e20.png

这是最常见的csv读取方法,估计80%以上的人都只用这一招。但其实csv还有更灵活的读取方法。

第二招:用nametuple

上面第一招是最简单的,下面我们用nametuple 来包裹一下这个生成的row数据:

e148f5b2a8104ceafabaaf7ac680ed80.png

  • nametuple其实是一个非常有用的类,这个类属于collections模块,而这个模块简直就是一个百宝箱,里面有非常多的实用的库;
  • 这里我们用next(f_csv)其实就是获取表格的头部来初始化这个Row;

e1f7edeed8606e15dec1cd74d3e7fc42.png

  • 然后循环来构造这个Row的数据,把我们表格里面的每一行的数据都转成nametuple格式的row_info;
  • 这样做的好处就是你可以随心所欲的访问这个row_info里面的数据,就想访问类数据一样,比如row_info.price 

第三招:用tuple类型转换

如果我们对csv数据每一行的类型都非常清楚的话,那可以直接用一个设定好的数据格式转换头来对数据进行转换。

10488c1f4db91d94b06b25def61315cc.png

操作的步骤其实跟上面差不多,就是对数据结果的清洗处理稍微不一样。这里非常巧妙的zip来构造一个嵌套的数据列表,然后用convert(data)把csv文件里面每一行的数据进行类型转换,这招真的很好用!

看一下结果:

f72dc2366b47438d5625c6be276a7908.png

第四招:用DictReader

上面用的nametuple其实也是一个数据的映射,有没有什么方法可以直接把csv的内容用映射的方法读取,直接出来一个字典? 还真有的,来看一下代码:

1ca73bb86cdf42943872fd0433018cd2.png

是不是非常简洁?原来csv模块直接内置了DictReader(),按照字典的方法进行读取,然后生成一个有序的字典,看一下结果:

482b4fd20260ba74432322c3f9f2c41d.png

有兴趣的可以看一下这个DictReader()的源码,它其实一个内部构造的迭代器类,在内部的__next__其实也是用的OrderedDict(zip(self.fieldnames, row))来生成的。

第五招:用字典转换

如果我们需要对这个csv里面的数据进行清洗,因为读出来的时候都是字符串,我们需要更新为特定的数据类型,这个时候也可以用字典转换这一招,也是非常巧妙的,我们看一下源码:

b09ac7ac566ae2f09c1125c20596cb3d.png

原来的数据价格Price和成交量,假如希望最后读取生成的是一个浮点型数据和整形的数据,那么用一个字典来巧妙的更新key即可。
  • 首先我们声明一个自定义的类型转换器field_types;
  • 然后循环生成一个可迭代的对象(key,conversion(row[key]);
  • 最后更新一下字典里面相同的key,比如row['price']的内容就会被更新了。
看完上面这5招,是不是才发现,原来Python读取csv文件读取还有这么花样!即便你平常只用最简单的第一招就够了,但能看懂并理解其他的代码,对你的代码能力和思路也很有帮助。多看代码、多写代码是学习编程的最有效方式。通过不断地练习,你也一定可以写出非常pythonic的代码。 作者:菜鸟大叔 来源:菜鸟编程大本营

_往期文章推荐_

Python-Excel模块哪家强?66240db140d7928e00a77bcdc1f99d55.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值