【Python】 csv模块的使用

来源:互联网 发布:时尚淘宝店 编辑:程序博客网 时间:2024/06/05 09:55

目录(?)[-]

  1. Python csv模块的使用
    1. csv简介
    2. csv模块中的函数

Python csv模块的使用

1、csv简介

CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本

格式,用以存储表格数据,包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件,它的使用是比

较广泛的(Kaggle上一些题目提供的数据就是csv格式),csv虽然使用广泛,但却没有通用的标准,所以在处理csv

格式时常常会碰到麻烦,幸好python内置了csv模块。下面简单介绍csv模块中最常用的一些函数。


更多内容请参考:https://docs.python.org/2/library/csv.html#module-csv


2、csv模块中的函数

  • reader(csvfile, dialect='excel', **fmtparams)
参数说明:

csvfile,必须是支持迭代(Iterator)的对象,可以是文件(file)对象或者列表(list)对象,如果是文件对
象,打开时需要加"b"标志参数。

dialect,编码风格,默认为excel的风格,也就是用逗号(,)分隔,dialect方式也支持自定义,通过调用register_dialect方法来注册,下文会提到。

fmtparam,格式化参数,用来覆盖之前dialect对象指定的编码风格。


[python] view plain copy
  1. import csv  
  2. with open('test.csv','rb') as myFile:  
  3.     lines=csv.reader(myFile)  
  4.     for line in lines:  
  5.         print line  


'test.csv'是文件名,‘rb’中的r表示“读”模式,因为是文件对象,所以加‘b’。open()返回了一个文件对象

myFile,reader(myFile)只传入了第一个参数,另外两个参数采用缺省值,即以excel风格读入。reader()返回一个

reader对象lines,lines是一个list,当调用它的方法lines.next()时,会返回一个string。上面程序的效果是将csv

文件中的文本按行打印,每一行的元素都是以逗号分隔符','分隔得来。


在我的test.csv文件中,存储的数据如图:



程序输出:

['1', '2']
['3', 'a']
['4', 'b']


补充:reader对象还提供一些方法:line_num、dialect、next()


  • writer(csvfile, dialect='excel', **fmtparams)

参数的意义同上,这里不赘述,直接上例程:

[python] view plain copy
  1. with open('t.csv','wb') as myFile:      
  2.     myWriter=csv.writer(myFile)  
  3.     myWriter.writerow([7,'g'])  
  4.     myWriter.writerow([8,'h'])  
  5.     myList=[[1,2,3],[4,5,6]]  
  6.     myWriter.writerows(myList)  

'w'表示写模式。

首先open()函数打开当前路径下的名字为't.csv'的文件,如果不存在这个文件,则创建它,返回myFile文件对象。

csv.writer(myFile)返回writer对象myWriter。

writerow()方法是一行一行写入,writerows方法是一次写入多行。

注意:如果文件't.csv'事先存在,调用writer函数会先清空原文件中的文本,再执行writerow/writerows方法。


补充:除了writerow、writerows,writer对象还提供了其他一些方法:writeheader、dialect



  • register_dialect(name, [dialect, ]**fmtparams)

这个函数是用来自定义dialect的。

参数说明:

name,你所自定义的dialect的名字,比如默认的是'excel',你可以定义成'mydialect'


[dialect, ]**fmtparams,dialect格式参数,有delimiter(分隔符,默认的就是逗号)、quotechar、

quoting等等,可以参考Dialects and Formatting Parameters


[python] view plain copy
  1. csv.register_dialect('mydialect',delimiter='|', quoting=csv.QUOTE_ALL)  

上面一行程序自定义了一个命名为mydialect的dialect,参数只设置了delimiter和quoting这两个,其他的仍然采用

默认值,其中以'|'为分隔符。接下来我们就可以像使用'excel'一样来使用'mydialect'了。我们来看看效果:


在我test.csv中存储如下数据:


以'mydialect'风格打印:

[python] view plain copy
  1. with open('test.csv','rb') as myFile:  
  2.     lines=csv.reader(myFile,'mydialect')  
  3.     print lines.line_num  
  4.     for line in lines:  
  5.         print line  

输出:

['1,2', '3']
['4,5', '6']


可以看到,现在是以'|'为分隔符,1和2合成了一个字符串(因为1和2之间的分隔符是逗号,而mydialect风格的分隔

符是'|'),3单独一个字符串。

对于writer()函数,同样可以传入mydialect作为参数,这里不赘述。


  • unregister_dialect(name)

这个函数用于注销自定义的dialect


此外,csv模块还提供get_dialect(name)、list_dialects()、field_size_limit([new_limit])等函数,这些都比较

简单,可以自己试试。比如list_dialects()函数会列出当前csv模块里所有的dialect:

[python] view plain copy
  1. print csv.list_dialects()  

输出:

['excel-tab', 'excel', 'mydialect']

'mydialect'是自定义的,'excel-tab', 'excel'都是自带的dialect,其中'excel-tab'跟'excel'差不多,

只不过以tab为分隔符。


csv模块还定义了

一些类:DictReader、DictWriter、Dialect等,DictReader和DictWriter类似于reader和writer。

一些常量:QUOTE_ALL、QUOTE_MINIMAL、.QUOTE_NONNUMERIC等,这些常量可以作为Dialects and Formatting Parameters的值。


先写到这,其他的以后用到再更新。

9
 
0
 
 

  相关文章推荐
  •  Python CSV模块简介
  •  Hadoop生态系统零基础入门
  •  Python使用pandas处理CSV文件
  •  系统集成工程师必过冲刺!
  •  Python csv模块学习
  •  征服React Native我有妙招
  •  Python-使用CSV模块进行文件处理
  •  FFmpeg音视频高级开发实战
  •  python csv
  •  5天搞定深度学习框架-Caffe
  •  Python 读取csv的某行
  •  Python数据分析经典案例解析
  •  Python对字母字符(串)中大小写转换函数--upper() 和 lower()
  •  深度学习30天系统实训
  •  scikit-learn中PCA的使用方法
  •  Python 处理CSV文件
查看评论
3楼 Q-沐风听雨-2016-12-28 21:49发表 [回复]
第一个代码,使用rb的方式读取会报错;使用r和rt的方式是正确的,所以,作者上面的内容请核实!
Re: vikipeng2017-04-05 11:05发表 [回复]
回复Q-沐风听雨-:对的,上述地方不能用rb
2楼 yzhao912016-08-11 22:26发表 [回复]
On Mac, you should type:
with open('test.csv','rU') as myFile
.....

instead of 'rb', you should type 'rU', otherwise you will get an error like this:
"new-line character seen in unquoted field - do you need to open the file in universal-newline mode?"
1楼 lipeng19932014-12-17 19:22发表 [回复]
good
发表评论
  • 用 户 名:
  • oppo62258801
  • 评论内容:
  • 插入代码
      
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
     
    wepon_
     
    1 1
    • 访问:772552次
    • 积分:5398
    • 等级: 
    • 排名:第5082名
    • 原创:72篇
    • 转载:3篇
    • 译文:0篇
    • 评论:385条
    About
    个人网站:http://wepon.me/ 
    github:https://github.com/wepe
    知乎: https://www.zhihu.com/people/wepon-huang
    很久没上CSDN,有问题欢迎邮件交流:masterwepon@163.com
    文章分类
  • Machine Learning(31)
  • Kaggle(2)
  • scikit-learn使用手册(1)
  • python(16)
  • 数据库(1)
  • openCV(3)
  • Leetcode(28)
  • ACM题解析(1)
  • 品味经典书籍(1)
  • 杂谈(0)
    文章存档
  • 2016年02月(1)
  • 2015年09月(1)
  • 2015年08月(1)
  • 2015年05月(3)
  • 2015年04月(3)
    展开
    阅读排行
  • 大数据竞赛平台——Kaggle 入门(94422)
  • 交叉熵代价函数(63687)
  • DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解(42598)
  • DeepLearning tutorial(6)易用的深度学习框架Keras简介(41330)
  • DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)(39744)
  • 正则化方法:L1和L2 regularization、数据集扩增、dropout(28953)
  • 【机器学习算法实现】主成分分析(PCA)——基于python+numpy(24670)
  • DeepLearning tutorial(1)Softmax回归原理简介+代码详解(21896)
  • scikit-learn中PCA的使用方法(20765)
  • 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size(18957)
    评论排行
  • DeepLearning tutorial(6)易用的深度学习框架Keras简介(76)
  • DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)(61)
  • 大数据竞赛平台——Kaggle 入门(36)
  • DeepLearning tutorial(7)深度学习框架Keras的使用-进阶(33)
  • DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解(22)
  • 正则化方法:L1和L2 regularization、数据集扩增、dropout(16)
  • Kaggle入门——使用scikit-learn解决DigitRecognition问题(14)
  • 交叉熵代价函数(13)
  • 【Python爬虫】批量抓取网页上的视频(8)
  • 【机器学习算法实现】logistic回归__基于Python和Numpy函数库(8)
    推荐文章
    • * CSDN日报20170828——《4个方法快速打造你的阅读清单》
    • * Android检查更新下载安装
    • * 动手打造史上最简单的 Recycleview 侧滑菜单
    • * TCP网络通讯如何解决分包粘包问题
    • * 程序员的八重境界
    • * 四大线程池详解
    最新评论
  • 【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库

    Wearthas: 天妒英才!!!楼主厉害!!!

  • DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    jacksonjack001: @u013422403:还有开头一处from theano.tensor.signal import...

  • Python-OpenCV人脸检测(代码)

    我不想当程序猿啊: 太感谢博主了

  • 【Python爬虫】批量抓取网页上的视频

    冲ge: 现在这个方法是不行了

  • 【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库

    海天一树: 感谢博主!

  • 朴素贝叶斯理论推导与三种常见模型

    sadjason: 楼主的这篇写得太棒了,浅显易懂

  • DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)

    xia13016450049: 楼主你好,我现在想用自己的图片样本来进行训练和测试,若直接用你的这个程序我的图片样本该如何设置

  • 正则化方法:L1和L2 regularization、数据集扩增、dropout

    nini_coded: 请问L2正则化里最下面的图是说明要减少训练样本的数量吗?和L中讲的减小权重大小有什么关系吗?谢谢啦!

  • 交叉熵代价函数

    nini_coded: 期望的输出y一定是在0-1之间吗?是做了归一化吗?不然怎么和激活化之后的实际输出a比较呢?

  • 大数据竞赛平台——Kaggle 入门

    零度的温柔: 感谢博主的呕心沥血之笔,倍感受用!但是苦恼,kaggle的账号注册后,confirm不了,数据集一直...