教你用Python读取CSV文件的5种方式

作者:寰宇001 时间:2022-12-11 15:32:51 

在python里面,读取或写入csv文件时,首先要import csv这个库,然后利用这个库提供的方法进行对文件的读写。

典型的数据集stocks.csv:

教你用Python读取CSV文件的5种方式

一个股票的数据集,其实就是常见的表格数据。有股票代码,价格,日期,时间,价格变动和成交量。这个数据集其实就是一个表格数据,有自己的头部和身体。

第一招:简单的读取

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

教你用Python读取CSV文件的5种方式

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

教你用Python读取CSV文件的5种方式

  • 首先读取csv 文件,然后用csv.reader生成一个csv迭代器f_csv

  • 然后利用迭代器的特性,next(f_csv)获取csv文件的头,也就是表格数据的头

  • 接着利用for循环,一行一行打印row的内容,也就是表格数据的身体

教你用Python读取CSV文件的5种方式 

第二招:用nametuple

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

教你用Python读取CSV文件的5种方式

  • nametuple其实是一个非常有用的类,这个类属于collections模块,而这个模块简直就是一个百宝箱里面有非常多的牛逼的库;

  • 这里我们用next(f_csv)其实就是获取表格的头部来初始化这个Row;

  • 然后循环来构造这个Row的数据,把我们表格里面的每一行的数据都喂成nametuple格式的row_info;

  • 这样做的好处就是你可以随心所欲的访问这个row_info里面的数据,就想访问类数据一样,比如row_info.price

第三招:用tuple类型转换

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

教你用Python读取CSV文件的5种方式

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

教你用Python读取CSV文件的5种方式

第四招:用DictReader

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

教你用Python读取CSV文件的5种方式

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

教你用Python读取CSV文件的5种方式

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

第五招:用字典转换

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

教你用Python读取CSV文件的5种方式

原来的数据价格Price和成交量,我希望最后读取生成的是一个浮点型数据和整形的数据,这么搞呢,用一个字典来巧妙的更新key即可。

  • 首先我们声明一个自定义的类型转换器field_types;

  • 然后循环生成一个可迭代的对象(key,conversion(row[key]);

  • 最后更新一下字典里面相同的key,比如row[‘price']的内容就会被更新了

参考链接 :

用Python读取CSV文件的5种方式https://mp.weixin.qq.com/s/cs4buSULva1FgCctp_fB6g

来源:https://blog.csdn.net/qq_40907977/article/details/108054088

标签:Python,读取,CSV文件
0
投稿

猜你喜欢

  • 解决python中 f.write写入中文出错的问题

    2021-01-02 04:57:44
  • VTK与Python实现机械臂三维模型可视化详解

    2021-11-03 19:36:02
  • 关于asp分页的新想法

    2008-09-06 12:53:00
  • Python实现自动化整理文件的示例代码

    2021-11-04 02:39:36
  • python调用百度API实现人脸识别

    2021-06-11 23:52:23
  • Golang的继承模拟实例

    2024-05-08 10:23:14
  • Python PyQt5中窗口数据传递的示例详解

    2023-12-30 10:14:43
  • vue 项目中当访问路由不存在的时候默认访问404页面操作

    2024-04-30 10:41:49
  • Python实现灰色关联分析与结果可视化的详细代码

    2023-08-03 15:01:56
  • 请谨慎对待程序的图标和名称

    2011-06-16 20:35:22
  • Python数据可视化常用4大绘图库原理详解

    2023-08-25 11:12:09
  • go自动下载所有的依赖包go module使用详解

    2024-04-28 10:49:48
  • python 实现docx与doc文件的互相转换

    2022-01-19 06:45:58
  • 浅谈Laravel模板实体转义带来的坑

    2024-06-05 09:44:24
  • phpMyAdmin 2.10.2 配置方法

    2007-08-22 08:11:00
  • javascript之学会吝啬 精简代码

    2024-04-19 09:52:21
  • Python实现爬取网页中动态加载的数据

    2021-08-11 18:35:27
  • 使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法

    2024-05-03 15:06:27
  • 详解Windows下PyCharm安装Numpy包及无法安装问题解决方案

    2021-01-27 11:58:32
  • sqlserver 数据库学习笔记

    2024-01-14 21:54:33
  • asp之家 网络编程 m.aspxhome.com