文章目录

  • 一、CSV简介
  • 二、python读取CSV文件
    • 2.1 csv.reader() 方法
    • 2.2 csv.DictReader()方法
  • 三、 python写入CSV文件
    • 3.1 csv.writer()对象
    • 3.2 csv.DictWriter()对象
  • 四、csv文件格式化参数和Dialect对象
    • 4.1 csv 文件格式化参数
    • 4.2 Dialect 对象

一、CSV简介

​ CSV(Comma Separated Values)是逗号分隔符文本格式,常用于Excel和数据库的导入和导出,Python内置的CSV模块提供对CSV格式文件读取和写入的对象。

二、python读取CSV文件

2.1 csv.reader() 方法

csv.reader(csvfile, dialect=‘excel’, **fmtparams)

主要用于文件的读取,返回一个reader迭代对象, 用于在csv文件内容上进行行迭代。

参数解读:

参数 解释
csvfile 需要一个文件对象或者list对象
dialect 用于指定csv的格式模式不同程序输出的csv格式有细微差别
fmtparams 是一系列参数列表,主要用于设置特定的格式,以覆盖dialect中的格式

可用属性:

csv.reader对象是可迭代对象,包含以下属性:

  1. csv.reader().dialect #返回其dialect
  2. csv.reader().line_num #f返回读入的行数
  3. csvreader.fieldnames #返回标题字段名

代码实例:


'''
程序操作的 stock.csv 文件'''
index,secID,ticker,secShortName,exchangeCD,tradeDate,preClosePrice,openPrice,highestPrice,lowestPrice,closePrice,turnoverVol
0,000001.XSHE,1,平安银行,XSHE,2017-12-1,13.38,13.4,13.48,12.96,13,178493315
1,000002.XSHE,2,万科A,XSHE,2017-12-1,31.22,30.5,32.03,30.5,30.73,55743855
2,000004.XSHE,4,国农科技,XSHE,2017-12-1,25.56,25.41,26.4,25.18,26.2,2211059
3,000005.XSHE,5,世纪星源,XSHE,2017-12-1,4.2,4.2,4.24,4.2,4.22,2365348
4,000006.XSHE,6,深振业A,XSHE,2017-12-1,9.85,0,0,0,9.85,0
5,000007.XSHE,7,全新好,XSHE,2017-12-1,16.66,0,0,0,16.66,0
6,000008.XSHE,8,神州高铁,XSHE,2017-12-1,8.48,8.48,8.74,8.41,8.59,5689054
7,000009.XSHE,9,中国宝安,XSHE,2017-12-1,7.6,7.61,7.63,7.53,7.58,9149395
8,000010.XSHE,10,美丽生态,XSHE,2017-12-1,5.13,5.13,5.23,5.11,5.21,6765580
9,000011.XSHE,11,深物业A,XSHE,2017-12-1,17.18,17.08,17.28,17,17.11,2474700
10,000012.XSHE,12,南玻A,XSHE,2017-12-1,9.19,9.1,9.28,9.02,9.11,35308183
11,000014.XSHE,14,沙河股份,XSHE,2017-12-1,12.6,12.49,12.73,12.45,12.64,1236110
12,000016.XSHE,16,深康佳A,XSHE,2017-12-1,6.2,6.34,6.54,6.31,6.43,29434715
13,000017.XSHE,17,深中华A,XSHE,2017-12-1,6.68,6.63,6.68,6.6,6.68,1562976
14,000018.XSHE,18,神州长城,XSHE,2017-12-1,7.16,7.16,7.21,7.1,7.15,5792996
15,000019.XSHE,19,深深宝A,XSHE,2017-12-1,12.15,0,0,0,12.15,0
16,000020.XSHE,20,深华发A,XSHE,2017-12-1,14.99,15.28,15.3,14.75,15,3250307
17,000021.XSHE,21,深科技,XSHE,2017-12-1,9.08,9.07,9.41,9.05,9.34,19877164
18,000022.XSHE,22,深赤湾A,XSHE,2017-12-1,24.14,0,0,0,24.14,0
19,000023.XSHE,23,深天地A,XSHE,2017-12-1,22.57,22.41,22.82,22.41,22.62,318725
20,000025.XSHE,25,特力A,XSHE,2017-12-1,40.56,40.25,40.67,40.08,40.17,1584600

使用csv.reader对象从csv文件读取数据,结果为列表对象row,需要通过索引row[i]访问。

import csv# 读取CSV文件的两种方法# ===========================================================
# csv.reader()方法with open('stock.csv','r',encoding='gbk')as f:Reads = csv.reader(f)print(type(Reads))   # <class '_csv.reader'>for i in Reads:# print(i)print(i[3],Reads.line_num)  # 可以通过下标取值,获取所有上市公司名称,.并获取所在文件的行数

结果:

<class '_csv.reader'>
secShortName 1
平安银行 2
万科A 3
国农科技 4
世纪星源 5
深振业A 6
全新好 7
神州高铁 8
....
略

2.2 csv.DictReader()方法

如果希望通过csv文件的首行标题字段名访问存储数据,则可以使用csv.DictReader对象读取

csv.DictReader(csvfile,fieldnames=None,restkey=None,restval=None,dialect=‘excel’,*args,**kwds)

也可叫next(reader), 返回的是一个reader字典对象

参数解读:

参数 解释
csvfile 需要一个文件对象或者list对象
dialect 用于指定csv的格式模式不同程序输出的csv格式有细微差别
fmtparams 用于指定字段名,如果没有指定,则第一行为字段名
restkey和restval 用于指定字段名和数据个数不一致时所对应的字段名或数据值

DictReader对象属性和方法:

方法:

csv.DictReader().next()# 称之为next(reader)

属性:

  • csvreader.dialect # 解析器使用的方言的只读描述。
  • csvreader.line_num #返回读入的行数
  • csvreader.fieldnames #返回标题字段名

代码实例

with open('stock.csv','r',encoding='gbk')as f:Reads = csv.DictReader(f)print(type(Reads))   # <class '_csv.reader'>for i in Reads:print(i['secShortName'], Reads.line_num)  # 通过字典的key获取上市公司名称.并获取所在文件的行数

结果:

<class 'csv.DictReader'>
平安银行 2
万科A 3
国农科技 4
世纪星源 5
深振业A 6
全新好 7
神州高铁 8
....
略

三、 python写入CSV文件

3.1 csv.writer()对象

csv.writer(csvfile,dialect=‘excel’,**fmtparams)

主要用于把列表数据写入到csv文件。

参数解读:

参数 解释
csvfile 任何支持write()方法的对象,通常为文件对象
dialect 用于指定csv的格式模式不同程序输出的csv格式有细微差别
fmtparams 是一系列参数列表,主要用于设置特定的格式,以覆盖dialect中的格式

可用方法:

  1. writer.writerow(row)   # 方法,写入一行数据

  2. writer.writerows # 方法,写入多行数据

可用属性:

writer.dialect # 只读属性,返回其 dialect

代码实例

import csvheaders = ('name','sex','age')
students = [("金鞍少年",'male',18),("白马金鞍",'male',17),
]with open("students.csv",'w',encoding='gbk',newline='') as fp:writer = csv.writer(fp, dialect='excel')writer.writerow(headers)   # 写入一行writer.writerows(students)  # 写入多行print(writer.dialect)   # <_csv.Dialect object at 0x000001F166725DB0>

结果:

3.2 csv.DictWriter()对象

csv.DictWriter(csvfile,fieldnames,restval = ‘’,extrasaction = ‘raise’,dialect = ‘excel’,*args,**kwds)

参数解读:

extrasaction用于指定多余字段时的操作,其他参数同上

DictWriter对象方法:

  1. csvwriter.writerow(row) # 将row写入writer的文件对象,根据当前方言进行格式化。支持迭代
  2. csvwriter.writerows(rows) # 将行中的所有元素写入编写器的文件对象,并根据当前方言进行格式化。支持迭代
  3. DictWriter.writeheader() # 写入标题字段名

DictWriter对象属性:

csvwriter.dialect # 使用的方言只读描述

代码实例:

headers = ('name','sex','age')
students = [{"name":"金鞍少年","sex":"male","age":18},{"name":"白马金鞍","sex":"male","age":18},]
# newline='' 写入内容不换行
with open("students2.csv",'w',encoding='gbk',newline='') as fp:writer = csv.DictWriter(fp,headers,dialect='excel')# 虽然DictWriter创建的时候有一个headers,但是想要写入数据进去,还是需要调用# writer.writeheader()方法,否则,表头数据写入不进去writer.writeheader()    # 写入标题字段名writer.writerows(students)

结果:

四、csv文件格式化参数和Dialect对象

4.1 csv 文件格式化参数

创建reader/writer对象时,可以指定csv文件格式化命名参数。

常用参数:

参数 作用
delimiter 用于分隔字段的分隔符。默认为","
lineterminator 用于写操作的行结束符,默认为“’\r\n ’ 。读操作将忽略此选项,它能认出跨平台的行结束符
quotechar 用于带有特殊字符(如分隔符)的字段的引用符号。默认为’ " ’
quoting 引用约定可选值有csv.QUOTE _ ALL(引用所有字段),csv.QUOTE_MINIMAL((引用如分隔符之类特殊字符的字段)默认),csv.QUOTE_NONNUMERIC((非数字字段)),csv.QUOTE_NON((不引用))
skipinitialspace 忽略分隔符后面的空白符。默认为False
doublequote 如何处理字段内的引用符号。如果为True ,字符串中的双引号使用" "表示;如果为False,使用转义字符escapechar指定的字符
escapechar 用于对分隔符进行转义的字符串
strict 如果为True,读入错误格式的CSV行时将导致csv.Error;默认值为False

代码示例:

import csvdef writecsv3(csvfilepath):headers = ['学号', '姓名', '性别', '班级', '语文', '数学', '英语']rows = [{'学号': '100010', '姓名': '小南', '性别': '男', '班级': '1班', '语文': '70', '数学': '89', '英语': '85'},{'学号': '100011', '姓名': '小风', '性别': '女', '班级': '6班', '语文': '79', '数学': '89', '英语': '85'}]with open(csvfilepath, 'w', newline='') as f:f_csv = csv.DictWriter(f, headers, delimiter=',', quoting=csv.QUOTE_MINIMAL)f_csv.writeheader()f_csv.writerows(rows)if __name__ == '__main__':writecsv3('students3.csv')

4.2 Dialect 对象

若干格式化参数可以组成Dialect对象,Dialect对象包含对应于命名格式化参数的属性。可以创建 Dialect或其派生类的对象,然后传递给reader或writer的构造函数。

下列 csv模块的函数可以创建Dialect对象

  1. csv.register_dialect(name[,dialect],**fmtparams):使用命名参数,注册一个名称
  2. csv.unregister_dialect(name):取消注册的名称。
  3. csv.get_dialect(name):获取注册的名称的Dialect对象,无注册时csv.Error
  4. csv.list_dialects():所有注册Dialect对象的列表。

​ 另外可以使用csv模块函数,获取和设置字段的长度限制:csv.filed_size_limit([new_linit]

import csvdef writecsv4(csvfilepath):csv.register_dialect('mydialect', delimiter='*', quoting=csv.QUOTE_ALL)headers = ['学号', '姓名', '性别', '班级', '语文', '数学', '英语']rows = [{'学号': '100013', '姓名': '小北', '性别': '男', '班级': '1班', '语文': '70', '数学': '80', '英语': '85'},{'学号': '100014', '姓名': '小琴', '性别': '女', '班级': '6班', '语文': '77', '数学': '89', '英语': '85'}]with open(csvfilepath, 'a+', newline='') as f:f_csv = csv.DictWriter(f, headers, dialect='mydialect')f_csv.writerows(rows)if __name__ == '__main__':writecsv4('students4.csv')

结果:

Python必学模块之CSV模块相关推荐

  1. python必学的模块_Python常用的模块

    模块和包 1.1模块介绍模块定义:一系列功能的集合体 模块使用: import导入模块 或者 from ... import... 导入模块 模块分类:内置模块 自定义模块 第三方模块 模块加载顺序: ...

  2. python必学的模块_Python必学的模块有哪些?

    展开全部 简单来说,模块就是一堆代码实现某个功32313133353236313431303231363533e4b893e5b19e31333433653866能,它们是已经写好的.py文件,在我们 ...

  3. Python必学的4个实战项目,拿走不谢

    最近遇到了一些比较经典的实战项目,比较适合零基础的小白以及基础较薄弱的小伙伴.想了想,我决定把它分享给大家. Python是一种极具可读性和通用性的编程语言.Python这个名字的灵感来自于英国喜剧团 ...

  4. Python必学知识

    1.传递参数与参数类型类型:位置参数 关键词参数 def trapezoid_area(base_up, base_down, height):return 1/2 * (base_up + base ...

  5. 【Python 必会技巧】copy 模块中 copy() 与 deepcopy() 函数的区别

    Python 中赋值语句不复制对象,而是在目标和对象之间创建绑定关系.对于自身可变或者包含可变项的集合对象,开发者有时会需要生成其副本用于改变操作,进而避免改变原对象.copy 模块提供了通用的浅层复 ...

  6. Python必学基础

    Python学习笔记 声明: 1.本文依据Mooc课程"Python语言程序设计",北理工嵩天老师的课程. 2.推荐这门课作为一些非计算机专业学习,内容深入浅出,而且结合简单的实际 ...

  7. 如何轻松了解 Python 必学的 django 框架?

    django 框架配有一个功能强大的管理站点,里面已经预定义了许多管理站点需要进行的操作,但是有时可能默认的操作不能满足需求,如需要批量更新选中的对象,这需要编写自定义 action 实现.本文基于 ...

  8. 写python程序用什么软件最好-Python必学之编译器用哪个好?你用错了吧!

    CPython 当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython.这个解释器是用C语言开发的,所以叫CPython.在命令行下运行p ...

  9. python一般用什么编译器-Python必学之编译器用哪个好?你用错了吧!

    python要知道怎么用好编译器.当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Pyt ...

最新文章

  1. 小蚂蚁学习mysql性能优化(4)--SQL以及索引优化--具体一些优化方法
  2. js 输出中文乱码 解决办法
  3. 【Binder 机制】AIDL 分析 ( 创建 AIDL 文件 | 创建 Parcelable 类 | AIDL 中使用 Parcelable 类 | 编译工程生成 AIDL 对应的Java源文件 )
  4. Xilinx FPGA 仿真环境设置(ISE + Modelsim + Debussy)
  5. Python函数式编程简介(三)匿名函数
  6. 2015蓝桥杯省赛---java---B---2(立方变自身)
  7. php 计划任务 不执行,CentOS 系统下 Laravel 计划任务 PHP artisan schedule:run 不执行,应该如何处理?...
  8. 密码学的数学模型及其理论基础 【二】
  9. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(9) - 64位整型指令(MMX指令集扩展)
  10. Navicat 连接Oracle时提示oracle library is not loaded的问题解决
  11. mysql insert 主键冲突_在MySql中建立存储过程和解决insert into select 中主键冲突的有关问题...
  12. Oracle in 不能超过1000的解决方案
  13. codery-why蘑菇街商城项目梳理笔记
  14. linux服务器上查看显卡(nvidia)型号
  15. Vodafone 移动终端声质量评价
  16. 程序员基础内功夯实——数据结构篇
  17. 代码格式化脚本CodeFormat
  18. 洛谷P4233 射命丸文的笔记 分治NTT+竞赛图
  19. 【精品盘点】2020年最受欢迎的6个知识库整理软件!
  20. 购买新iPhone 14后,如何通过iCloud转移数据?

热门文章

  1. 金港赢配资简述今天PVC大爆发
  2. 试着编写了一下战网的登录页面,刚学会css和html5
  3. 惠威试音碟高品质MP3版
  4. 3dmax2019删除不想要的模型部分
  5. Yoga是联想PC+战略的延伸和拓展
  6. 厘米与英尺、英寸之间的换算
  7. 产品经理之用户体验设计
  8. Stratifyd汪晓宇:当公司目标都指向客户,团队管理其实很简单 | 舵舟
  9. AI云边调度EasyCVR播放HLS流时出现闪屏是什么原因?如何解决?
  10. matlab绿色 不伤眼,蓝光和超清哪个伤眼睛 伤害都很低不用过多担心