资讯专栏INFORMATION COLUMN

【Python Library】csv — CSV File Reading and Writing

zhigoo / 1051人阅读

摘要:一概述逗号分隔符文件是表格与数据库操作之中最常用的输入输出格式。但是尽管不同规范的之中,分隔符和引用符千差万别,他们的格式还是大体相似的,因此制作一个可以高效处理文件中的数据同时还能将读写的细节隐去的模块并不是什么难事儿。

一、概述

CSV(逗号分隔符)文件是表格与数据库操作之中最常用的输入输出格式。在RFC4180中的文件描述标准对CSV格式进行规范之前,CSV格式文件就已经被应用了很多年了。而缺乏合适的格式描述规范意味着不同应用的输入输出格式会有着细微的差别。因此在从不同源生成这些文件的时候,这些差别相当恼人。但是尽管不同规范的CSV之中,分隔符和引用符千差万别,他们的格式还是大体相似的,因此制作一个可以高效处理(manipulate)csv文件中的数据同时还能将读写的细节隐去的模块并不是什么难事儿。
Python中的CSV模块之中实现了读写CSV格式文件的一些类,他可以让你的程序以一种更容易被Excel处理的格式来输出或者读入数据,而不必纠结于CSV文件的一些麻烦的小细节。而且CSV模块可以让你更自由的定制你想要的CSV格式文件。

二、类与方法简介 1.数据读取

csv.reader(csvfile, dialect="excel", **fmtparams)
他是读取CSV文件时最常用的方法
他的csvfile参数需要一个文件类型的对象,比如:

fileObj = open("E:/inputFile.csv","r")
csvReader = csv.reader(fileObj)

那么这个方法返回的csvReader就是一个可以按行读取文件的对象。

An optional dialect parameter can be given which is used to define a set of parameters specific to a particular CSV dialect.

其实这个看你想以什么规范操作csv文件,可选的参数有三个,分别是excel,excel-tab和unix,基本用不着该这个参数。
而至于fmtparams包含的可选参数就得好好说道说道了。

delimiter

这个参数是用来指明分割符的,多数csv文件的分隔符是英文逗号,但是万一有文件整点幺蛾子咋整,比如把英文冒号当分割符,那就要把这个参数指明为:delimiter=":"

quotechar

这个参数指明了引用符是啥,什么是引用符呢,举个例子,正常情况下,我们的csv之中的一行可能是这个样子的:abc,bcd,cde。就像这样

这没啥问题
但是万一你的csv文件的每有一个表格里记录的是:ab,c,就像这样

这就出事儿了,因为csv当你的一个表格内出现了一个英文逗号,而此时你的分隔符也恰好是英文逗号,那把这玩意关了在打开,那最后岂不是会变成了

这样,为了防止这种情况发生,就需要用引用符了,我们把ab,c用双引号括起来,告诉程序,这个“ab,c”是一个东西,不许拆分,就可以了。而因此,你可以传入quotechar="xxx"来定义你自己的引用符。

quoting

他的功能是指明了引用的模式,首先说,他可以接受几种参数,长得像csv.QUOTE_的参数都可以传进去,比如说csv.QUOTE_NONE,就是告诉程序,我的csv文件里不存在引用符,也就是说,所有的逗号都当做分隔符,不管他在不在引用符里面。

doublequote

那么万一我们的一个表格里本身就即包括一个英文逗号又包括一个双引号,而恰好你的分隔符是英文都好,而引用符也是英文双引号,这不又出事儿了么,就好比,假如你的一个行长这样,

由于第二列里有一个逗号,那就要用引用符把这个东西包起来,而里面又有一个双引号,那这时候匹配双引号的时候就会出错了,而为了防止这种问题的产生,我们在文件编辑的时候,可以把引用符之中的双引号重复一次,用来代表:这个表格里出现了一次双引号,比如用记事本打开的时候,像这样

这样在csvReader读取文件的时候,他如果碰到了在引用符之中的引用符,会吧连续的两个引用符看做一个双引用符。也就是说用csvReader读取的时候,读取的结果就是会就是

看吧,没错了吧

escapechar

doublequote提供了一种,解决如果引用符里出现引用符问题的文件规范,而你也可以自己搞一套解决方案,谁说必须要重复一次啊,烦不烦啊,我就不想敲两次,于是我把doublequote这个参数指定为False,但是还是要必须指定点啥玩意来完成这个功能的。这就是这个参数的功能。比如说当我们吧这个参数指定为escapechar=":",而当我们的输入文件为

那么在用csvReader读取的时候,由于第二个引号有一个冒号前缀,那么读取的时候就会认为,第二个冒号是这个表格内就存在的冒号,不是作为分割符存在的。读取结果与上一个结果一样的。

在使用reader的时候后,示例代码如下

>>> import csv
>>> with open("eggs.csv", newline="") as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=" ", quotechar="|")
...     for row in spamreader:
...         print(", ".join(row))
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam
2.数据写入

csv.writer(csvfile, dialect="excel", **fmtparams)
关键参数与之前一样,反过来理解就好了
写入示例代码如下

import csv
with open("eggs.csv", "w", newline="") as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=" ",
                            quotechar="|", quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(["Spam"] * 5 + ["Baked Beans"])
    spamwriter.writerow(["Spam", "Lovely Spam", "Wonderful Spam"])

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41328.html

相关文章

  • Awesome Python

    摘要:漢字拼音 Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management Package Management Package Repositorie...

    fizz 评论0 收藏0
  • TensorFlow学习笔记(10):读取文件

    摘要:简介读取数据共有三种方法当运行每步计算的时候,从获取数据。数据直接预加载到的中,再把传入运行。在中定义好文件读取的运算节点,把传入运行时,执行读取文件的运算,这样可以避免在和执行环境之间反复传递数据。本文讲解的代码。 简介 TensorFlow读取数据共有三种方法: Feeding:当TensorFlow运行每步计算的时候,从Python获取数据。在Graph的设计阶段,用place...

    Neilyo 评论0 收藏0
  • Awesome JavaScript

    摘要: Awesome JavaScript A collection of awesome browser-side JavaScript libraries, resources and shiny things. Awesome JavaScript Package Managers Loaders Testing Frameworks QA Tools MVC Framew...

    endless_road 评论0 收藏0
  • MongoDB常用命令

    摘要:启动允许后台运行,但是必须指定日志记录文件路径指定日志记录文件路径导出指定数据库指定指定输出文件名称导出为格式指明需要导出哪些列指明导出格式为导入导入文件指明要导入的文件格式 启动MongoDB $mongod --fork --logpath=/data/log/r3.log--fork 允许mongod后台运行,但是必须指定日志记录文件路径(Enables a daemon mod...

    joywek 评论0 收藏0
  • 使用Pandas&NumPy进行数据清洗的6大常用方法

    摘要:在这个教程中,我们将利用的和包来进行数据清洗。在很多情况下,使用唯一的值作为索引值识别数据字段是非常有帮助的。清洗数据字段到现在为止,我们移除了不必要的列并改变了我们的索引变得更有意义。 作者:xiaoyu微信公众号:Python数据科学知乎:Python数据分析师 数据科学家花了大量的时间清洗数据集,并将这些数据转换为他们可以处理的格式。事实上,很多数据科学家声称开始获取和清洗数据...

    siberiawolf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<