博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】Python处理csv文件
阅读量:7287 次
发布时间:2019-06-30

本文共 2902 字,大约阅读时间需要 9 分钟。

Python处理csv文件

CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看。由于是纯文本,任何编辑器也都可打开。与Excel文件不同,CSV文件中:

  • 值没有类型,所有值都是字符串
  • 不能指定字体颜色等样式
  • 不能指定单元格的宽高,不能合并单元格
  • 没有多个工作表
  • 不能嵌入图像图表

在CSV文件中,以,作为分隔符,分隔两个单元格。像这样a,,c表示单元格a和单元格c之间有个空白的单元格。依此类推。

不是每个逗号都表示单元格之间的分界。所以即使CSV是纯文本文件,也坚持使用专门的模块进行处理。Python内置了csv模块。先看看一个简单的例子。

从CSV文件中读取数据

import csvfilename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv' with open(filename) as f: reader = csv.reader(f) print(list(reader))

data不能直接打印,list(data)最外层是list,里层的每一行数据都在一个list中,有点像这样

[['name', 'age'], ['Bob', '14'], ['Tom', '23'], ...]

于是我们可以这样访问到Bob的年龄reader[1][1], 在for循环中遍历如下

import csvfilename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv' with open(filename) as f: reader = csv.reader(f) for row in reader: # 行号从1开始 print(reader.line_num, row)

截取一部分输出

1 ['AKST', 'Max TemperatureF', 'Mean TemperatureF', 'Min TemperatureF', 'Max Dew PointF', 'MeanDew PointF', 'Min DewpointF', 'Max Humidity', ' Mean Humidity', ' Min Humidity', ' Max Sea Level PressureIn', ' Mean Sea Level PressureIn', ' Min Sea Level PressureIn', ' Max VisibilityMiles', ' Mean VisibilityMiles', ' Min VisibilityMiles', ' Max Wind SpeedMPH', ' Mean Wind SpeedMPH', ' Max Gust SpeedMPH', 'PrecipitationIn', ' CloudCover', ' Events', ' WindDirDegrees'] 2 ['2014-1-1', '46', '42', '37', '40', '38', '36', '97', '86', '76', '29.95', '29.77', '29.57', '10', '8', '2', '25', '14', '36', '0.69', '8', 'Rain', '138'] ...

前面的数字是行号,从1开始,可以用reader.line_num获取。

要注意的是,reader只能被遍历一次。由于reader是可迭代对象,可以使用next方法一次获取一行。

import csvfilename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv' with open(filename) as f: reader = csv.reader(f) # 读取一行,下面的reader中已经没有该行了 head_row = next(reader) for row in reader: # 行号从2开始 print(reader.line_num, row)

写数据到csv文件中

有reader可以读取,当然也有writer可以写入。一次写入一行,一次写入多行都可以。

import csv# 使用数字和字符串的数字都可以 datas = [['name', 'age'], ['Bob', 14], ['Tom', 23], ['Jerry', '18']] with open('example.csv', 'w', newline='') as f: writer = csv.writer(f) for row in datas: writer.writerow(row) # 还可以写入多行 writer.writerows(datas)

如果不指定newline='',则每写入一行将有一空行被写入。上面的代码生成如下内容。

name,ageBob,14Tom,23Jerry,18name,age Bob,14 Tom,23 Jerry,18

DictReader和DictWriter对象

使用DictReader可以像操作字典那样获取数据,把表的第一行(一般是标头)作为key。可访问每一行中那个某个key对应的数据。

import csvfilename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv' with open(filename) as f: reader = csv.DictReader(f) for row in reader: # Max TemperatureF是表第一行的某个数据,作为key max_temp = row['Max TemperatureF'] print(max_temp)

使用DictWriter类,可以写入字典形式的数据,同样键也是标头(表格第一行)。

import csvheaders = ['name', 'age'] datas = [{ 'name':'Bob', 'age':23}, { 'name':'Jerry', 'age':44}, { 'name':'Tom', 'age':15} ] with open('example.csv', 'w', newline='') as f: # 标头在这里传入,作为第一行数据 writer = csv.DictWriter(f, headers) writer.writeheader() for row in datas: writer.writerow(row) # 还可以写入多行 writer.writerows(datas)

就先了解到这儿。

转载地址:http://capjm.baihongyu.com/

你可能感兴趣的文章
java:关于SerialVersionUid
查看>>
nagios与cacti的整合
查看>>
使用RHEL6.3+PXE+DHCP+Apache+NFS+KickStart 无人值守安装RHEL6.3
查看>>
JXL GC 问题探讨
查看>>
并发编程四之互斥
查看>>
极速免费-Magento开源产品上传利器magmi
查看>>
magento如何获得产品的属性Minimum Qty Allowed in Shopping Cart
查看>>
FreeMarker循环变量内建函数
查看>>
Python中time模块详解
查看>>
java 的模板方式设计模式
查看>>
跳转到servlet出现java.lang.InstantiationException:
查看>>
RedHat7 配置VNCServer
查看>>
git 回滚版本
查看>>
Nginx反向代理实现会话(session)保持的两种方式
查看>>
Nginx配置指令location匹配符优先级和安全问题
查看>>
sc create 创建启动服务带参数 目录不能有空格
查看>>
Glusterfs初体验
查看>>
Centos搭建SVN服务器三步曲
查看>>
NC-ERP IUFO系统管理要点
查看>>
linux下将文件设置为swap
查看>>