Python处理csv文件

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

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

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

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

从CSV文件中读取数据

  1. import csv
  2. filename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv'
  3. with open(filename) as f:
  4. reader = csv.reader(f)
  5. print(list(reader))

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

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

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

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

截取一部分输出

  1. 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. 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']
  3. ...

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

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

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

写数据到csv文件中

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

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

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

  1. name,age
  2. Bob,14
  3. Tom,23
  4. Jerry,18
  5. name,age
  6. Bob,14
  7. Tom,23
  8. Jerry,18

DictReader和DictWriter对象

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

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

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

  1. import csv
  2. headers = ['name', 'age']
  3. datas = [{'name':'Bob', 'age':23},
  4. {'name':'Jerry', 'age':44},
  5. {'name':'Tom', 'age':15}
  6. ]
  7. with open('example.csv', 'w', newline='') as f:
  8. # 标头在这里传入,作为第一行数据
  9. writer = csv.DictWriter(f, headers)
  10. writer.writeheader()
  11. for row in datas:
  12. writer.writerow(row)
  13. # 还可以写入多行
  14. writer.writerows(datas)

就先了解到这儿。

【Python】Python处理csv文件的更多相关文章

  1. python在处理CSV文件时,字符串和列表写入的区别

    概述 Python在处理CSV文件时,如果writerow的对象是<type 'unicode'>字符串时,写入到CSV文件时将会出现一个字符占一个单元格的情况: 但是将字符串转换为列表类 ...

  2. python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  3. Python: 对CSV文件读写 和 Md5加密

    1. python 有专门的csv包,直接导入即可. import csv: 2. 直接使用普通文件的open方法 csv_reader=open("e:/python/csv_data/l ...

  4. Python在向CSV文件写中文时乱码的处理办法

    前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode.当list.tuple.dict里面有中文时,打印出来的是Unicode编码,这个是无解的.对中文 ...

  5. [Python Study Notes]csv文件操作

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  6. 【python】写csv文件时遇到的错误

    1.错误 在许多文件中,写入csv文件时都加"wb",w指写入,b指二进制 如: csvwrite=csv.writer(open("output.csv",& ...

  7. python 数据处理 对csv文件进行数据处理

    数据如下图: 用python对数据进行处理: #读取csv文件内容并进行数据处理 import os import csv import datetime import re from itertoo ...

  8. [Python]-pandas模块-CSV文件读写

    Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,它不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV.HDF5.HTML 等 ...

  9. Python中读取csv文件内容方法

    gg 224@126.com 85 男 dd 123@126.com 52 女 fgf 125@126.com 23 女 csv文件内容如上图,首先导入csv包,调用csv中的方法reader()创建 ...

  10. python mongodb 读写CSV文件

    # -*- coding: utf-8 -*-import osimport csvimport pymongofrom pymongo import MongoClient #建立连接client ...

随机推荐

  1. 20155307《Java程序设计》实验二实验报告

    一.单元测试和TDD 用程序解决问题时,要学会写以下三种代码: 伪代码 产品代码 测试代码 正确的顺序应为:伪代码(思路)→ 测试代码(产品预期功能)→ 产品代码(实现预期功能),这种开发方法叫&qu ...

  2. Spring框架实例

    一,介绍 Spring框架核心是Ioc控制反转,只要在容器中注册以后,依赖从容器中获取即可 简单的理解:需要一个值,在程序中定义一个变量,但是不赋值,只设置set方法,运行时,容器为该变量赋值 二,实 ...

  3. [WC2010]重建计划 长链剖分

    [WC2010]重建计划 LG传送门 又一道长链剖分好题. 这题写点分治的人应该比较多吧,但是我太菜了,只会长链剖分. 如果你还不会长链剖分的基本操作,可以看看我的长链剖分总结. 首先一看求平均值最大 ...

  4. idea 严重: Error configuring application listener of class org.springframework.web.context.Context 后面省略

    根本原因:jar文件没有同步发布到自己项目的lib目录中 解决方案:把之前在这个位置的jar文件,put into 到 /WEB-INF/lib 目录下即可

  5. 用Python实现多站点运维监控

    在小型公司里如果产品线单一的话,比如就一个app, 一般1~2个运维就够用了.如果产品过于庞大,就需要多个运维人员. 但对于多产品线的公司来说,运维人员就要必须分多个人负责,因为超过200个站点让1个 ...

  6. Android错误:can not get file data of lua/start_v2.op [LUA ERROR] [string "require "lua/start_v2””] 已解决

    错误: can not get file data of lua/start_v2.op [LUA ERROR] [string "require "lua/start_v2””] ...

  7. SQLAlchemy 简单笔记

    ORM 江湖##### 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函 ...

  8. 剑指offer-数值的整数方

    数值的整数方 一.问题描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 二.算法思路 按照指数Exp的情况进行讨论. Exp> ...

  9. vim—多行注释、取消多行注释

    多行注释 命令模式: (1)将光标放在要注释的行首,按下组合键ctrl + v ,然后按上下键选取要注释的行. (2)按下大i键,然后插入要注释的符号 # (3)按ESC键,退出后,就会全部注释. 取 ...

  10. sklearn中的交叉验证(Cross-Validation)

    这个repo 用来记录一些python技巧.书籍.学习链接等,欢迎stargithub地址sklearn是利用python进行机器学习中一个非常全面和好用的第三方库,用过的都说好.今天主要记录一下sk ...