文章目录

  • writer
  • reader
  • dialect
  • DictWriter和DictReader

csv中最重要的两个函数分别是writerreader。考虑到很多人手头可能没有适合学习操作的csv文件,所以对csv模块的学习从writer开始。

writer

>>> import csv
>>> data = [[i*j for j in range(5)] for i in range(5)]
>>> f = open('test.csv','w')    #以写模式打开`test.csv`
>>> with f:             # with可以在程序段结束后自动close
...   w = csv.writer(f)
...   for row in data:
...     w.writerow(row) #按行写入`row`

从而我们新建了一个csv文件,其内容如下。

0,0,0,0,00,1,2,3,40,2,4,6,80,3,6,9,120,4,8,12,16

delimiter参数用于更改列之间的分割符号,默认为,,若将w写为w=csv.writer(f,delimiter=' '),则得到的csv文件内容为

0 0 0 0 00 1 2 3 40 2 4 6 80 3 6 9 120 4 8 12 16

reader

readerwriter的逆过程,可以按行读取csv中的数据

>>> f = open('test.csv','r') #通过r模式打开刚刚创建的csv
>>> with f:
...   r = csv.reader(f)
...   for row in r:
...     print(row)
...
['0', '0', '0', '0', '0']
[]
['0', '1', '2', '3', '4']
[]
['0', '2', '4', '6', '8']
[]
['0', '3', '6', '9', '12']
[]
['0', '4', '8', '12', '16']

writerreader中还有quoting参数,用以设置csv中识别引号的方式,其可选参数如下

适用于

加引号的字段

csv.QUOTE_ALL

writer

所有字段

csv.QUOTE_MINIMAL

writer

包含特殊字符的字段

csv.QUOTE_NONNUMERIC

writer
reader

非数字字段
将无引号的字段转为float类型

csv.QUOTE_NONE

writer
reader

不适用引号
不处理引号字符

dialect

csv是一种简单的文件格式,但仍然需要一些设置,比如分隔符以及处理引号的方式等。dialect便是对某些处理方式的集成,csv.reader中默认的dialectexcel,便相当于声明了使用,作为分隔符。

通过list_dialects可以获取当前已经定义的dialect

>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']

这三种dialect分别对应三个已经封装好的类:excel, excel_tab, unix_dialect,其各项参数如下

成员变量

csv.excel

csv.excel_tab

csv.unix_dialect

delimiter

,

,

doublequote

True

True

True

escapechar

None

None

None

lineterminator

quotechar

"

"

"

quoting

0

0

1

skipinitialspace

False

False

False

其中,doublequote为True表示默认双引号,否则为单引号;escapechar为None表示禁用转义;lineterminator表示行结尾;quotechar表示用于包含特殊字符的字符;skipinitialspace为False则不忽略分隔符之后的空格。

通过register_dialectunregister_dialect可以新建或者取消dialect,例如

>>>csv.register_dialect('test',delimiter='-',quoting=csv.QUOTE_NONE)

即创建了一个新的dialect,其分割符号为-,而引用模式采取QUOTE_NONE

DictWriter和DictReader

readerwriter主要用于按行读写数据,其操作的数据一般是list这种一维可迭代结构。相比之下,DictWriterDictReader可以更加方便地通过字典来操作数据。

例如

>>> dct = [{str(j):i*j for j in range(5)} for i in range(5)]
>>> for i in dct:
...   print(i)
...
{'0': 0, '1': 0, '2': 0, '3': 0, '4': 0}
{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4}
{'0': 0, '1': 2, '2': 4, '3': 6, '4': 8}
{'0': 0, '1': 3, '2': 6, '3': 9, '4': 12}
{'0': 0, '1': 4, '2': 8, '3': 12, '4': 16}

则通过DictWriter可将dct写入csv中,以key为每一列的标题,以value为某行对应标题的值。

>>> with open('dict.csv', 'w', newline='') as csvfile:
...   titles = list(dct[0].keys())
...   w = csv.DictWriter(csvfile,fieldnames=titles)
...   for kw in dct:
...     w.writerow(kw)

dict.csv内容为

0,0,0,0,0
0,1,2,3,4
0,2,4,6,8
0,3,6,9,12
0,4,8,12,16

python读取和保存csv文件相关推荐

  1. Python使用pandas保存csv文件:如果文件存在则只添加内容(append),如果无表则同时写入表头和内容(write)

    Python使用pandas保存csv文件:如果文件存在则只添加内容(append),如果无表则同时写入表头和内容(write) 目录

  2. python读取和保存json文件

    json文件是一种常见的数据存储文件,比txt看着高级点,比xml看着人性化一点. 同时,json作为一种通用协议的文件格式,可以被各种语言方便地读取.所以,json非常适合用来存储结构化的数据. j ...

  3. python读取多列csv文件_多列上的csvjoin

    我有以下csv文件,我想Inner Join CSV 1:行程_数据.csv(250 MB)head -2 rand_trip_data_1.csv medallion,hack_license,ve ...

  4. python保存mat文件_python读取文件——python读取和保存mat文件

    首先我们谈谈MarkDown编辑器,我感觉些倒是挺方便的,因为用惯了LaTeX,对于MarkDown还是比较容易上手的,但是我发现,MarkDown中有这样几个问题一直没能找到具体的解决方法:图片大小 ...

  5. python保存为mat文件_python读取文件——python读取和保存mat文件-Go语言中文社区

    首先我们谈谈MarkDown编辑器,我感觉些倒是挺方便的,因为用惯了LaTeX,对于MarkDown还是比较容易上手的,但是我发现,MarkDown中有这样几个问题一直没能找到具体的解决方法: 图片大 ...

  6. python读取压缩包中csv文件

    #coding=utf-8 import rarfile path = "E:\\New\\New.rar" path2 = "E:\\New"rf = rar ...

  7. python读取两个csv文件后比较_python – 读取两个csv文件并比较每一行.如果行匹配打印两行,如果不相似则打印无效...

    import csv f1 = open("file1.csv") f2 = open("file2.csv") csv_f1 = csv.reader(f1) ...

  8. csv文件python是怎么输入的,python怎么读取和写入csv文件

    Python读取与写入CSV文件需要导入Python自带的CSV模块,然后通过CSV模块中的函数csv.reader()与csv.writer()来进行CSV文件的读取与写入. 写入CSV文件impo ...

  9. Ubuntu 环境 中 python读取和保存 .txt 、.csv、.json文件数据并绘制图形

    一.数据格式 二.程序 read_imu.py # coding=UTF-8import cv2 import numpy as np import matplotlib.pyplot as plt ...

最新文章

  1. linux 修改图片的尺寸
  2. unix环境高级编程-线程(2)
  3. 一篇文章解决机器学习,深度学习入门疑惑
  4. Autofac 一个使用Demo
  5. [cocoapods]安装cocoapods
  6. (转)在WCF服务的ServiceReferences.ClientConfig中使用相对路径
  7. deepin深度启动盘制作工具下载地址
  8. matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码
  9. 数据不足,如何进行迁移学习?
  10. Fastformer:简单又好用的Transformer变体!清华MSRA开源线性复杂度的Fastformer!
  11. 语音转文字的软件APP
  12. mysql insert表名前不写字段_云计算教程分享Mysql技术知识点
  13. Linux工作笔记033---Linux(CentOS7)安装zip、unzip命令
  14. SpringMVC之拦截器实现登录验证
  15. 基于GEE平台分析湖北省近35年地表水变化特征
  16. Ubuntu 如何定制桌面解放你的个性?
  17. 大数据全样而非抽样原理_干货 | 大数据思维的十大核心原理(二)
  18. 单片机c语言程序包txt,单片机C语言应用100例(第3版)(含光盘1张) pdf epub mobi txt 下载...
  19. 中英文金额大写转换器
  20. 声效表达在游戏沉浸方面的影响力

热门文章

  1. java 自动装箱拆箱_java——自动装箱拆箱
  2. 职业教育标准教材·计算机组装与维修,中等职业教育计算机专业系列教材:计算机组装与维护...
  3. vue 为全局变量赋值_vue定义全局变量和全局方法的方法示例
  4. ShardingSphere系列之Sharding JDBC实现原理
  5. ActiveReports 大数据分析报告:2018中国电影再次迎来黄金时代
  6. 使用动态链接库的好处
  7. java中继承类 student 类例子_java中student类继承问题
  8. Codeforces Round #628 (Div. 2) D. Ehab the Xorcist
  9. Linux缓存命令(查看、清理)
  10. html如何设置对齐,CSS如何设置对齐方式?