Python操作csv文件
1.什么是csv文件
The so-called CSV (Comma Separated Values) format is the most common import and export format for spreadsheets and databases. CSV format was used for many years prior to attempts to describe the format in a standardized way in RFC 4180.
2.csv文件缺点
The lack of a well-defined standard means that subtle differences often exist in the data produced and consumed by different applications. These differences can make it annoying to process CSV files from multiple sources. Still, while the delimiters and quoting characters vary, the overall format is similar enough that it is possible to write a single module which can efficiently manipulate such data, hiding the details of reading and writing the data from the programmer.
3.python模块csv.py
The csv module implements classes to read and write tabular data in CSV format. It allows programmers to say, “write this data in the format preferred by Excel,” or “read data from this file which was generated by Excel,” without knowing the precise details of the CSV format used by Excel. Programmers can also describe the CSV formats understood by other applications or define their own special-purpose CSV formats.
the csv module’s reader and writer objects read and write sequences. Programmers can also read and write data in dictionary form using the DictReader and DictWriter classes
reader(csvfile[, dialect='excel'][, fmtparam])
csvfile
需要是支持迭代(Iterator)的对象,并且每次调用next方法的返回值是字符串(string),通常的文件(file)对象,或者列表(list)对象都是适用的,如果是文件对象,打开是需要加"b"标志参数。
dialect
编码风格,默认为excel方式,也就是逗号(,)分隔,另外csv模块也支持excel-tab风格,也就是制表符(tab)分隔。其它的方式需要自己定义,然后可以调用register_dialect方法来注册,以及list_dialects方法来查询已注册的所有编码风格列表。
fmtparam
格式化参数,用来覆盖之前dialect对象指定的编码风格。
参数解释:
delimiter:设置分隔符
quotechar:设置引用符
quoting:引号选项,有4种不同的引号选项
在csv模块中定义为四个变量:
QUOTE_ALL不论类型是什么,对所有字段都加引号。
QUOTE_MINIMAL对包含特殊字符的字段加引号(所谓特殊字符是指,对于一个用相同方言和选项配置的解析器,可能会造成混淆的字符)。这是默认选项。
QUOTE_NONNUMERIC对所有非整数或浮点数的字段加引号。在阅读器中使用时,不加引号的输入字段会转换为浮点数。
QUOTE_NONE输出中所有内容都不加引号。在阅读器中使用时,引号字符包含在字段值中(正常情况下,它们会处理为定界符并去除)。
import csv def testReader(file):
with open(file, 'r') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for row in spamreader:
print(', '.join(row)) if __name__ == '__main__':
csvFile = 'test.csv'
testReader(csvFile)
writer(csvfile[, dialect='excel'][, fmtparam])
参数表(略: 同reader, 见上)
def testWriter(file):
with open(file, 'w') 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'])
DictReader(f,fieldnames = None,restkey = None,restval = None,dialect ='excel',* args,** kwds )
创建一个像常规阅读器一样操作的对象,但将每一行中的信息映射到一个OrderedDict 由可选的fieldnames参数给出的键。
字段名的参数是一个序列。如果省略字段名称,文件f的第一行中的值将用作字段名称。无论字段名称如何确定,有序字典保留其原始排序。
如果一行的字段数超过了字段名,剩下的数据将被放在一个列表中,并与restkey(默认为None)指定的字段名一起存储。如果非空行的字段数少于字段名,则缺少的值将被填入None。
def testDictReader(file):
# 院系,专业,年级,学生类别,班级,学号,姓名,学分成绩,更新时间,班级排名,参与班级排名总人数
with open(file, 'rb') as csvfile:
dictreader = csv.DictReader(csvfile)
for row in dictreader:
print(' '.join([row['院系'], row['专业'], row['学号'], row['姓名']]))
DictWriter(f,fieldnames,restval =“,extrasaction ='raise',dialect ='excel',* args,** kwds )
创建一个像普通writer一样运行的对象,但将字典映射到输出行上。的字段名的参数是一个sequence标识,其中在传递给字典值的顺序按键的writerow()方法被写入到文件 ˚F。可选的restval参数指定字典缺少字段名中的键时要写入的值。如果传递给该writerow()方法的字典包含在字段名称中未找到的键 ,则可选的extrasaction参数指示要执行的操作。如果设置为'raise'默认值,ValueError 则为a 。如果设置为'ignore',字典中的额外值将被忽略。任何其他可选或关键字参数都传递给底层 writer实例。
请注意,与DictReader类不同,fieldnames参数DictWriter不是可选的。由于Python的dict 对象未被排序,因此没有足够的可用信息推导出行应该写入文件f的顺序。
def testDictWriter(file):
with open(file, 'w') as csvfile:
fieldnames = ['院系', '专业', '年级', '学生类别', '班级', '学号']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow(
{'院系': '信息学院', '专业': '计算机科学与技术', '年级': '2011级', '学生类别': '本科(本科)4年', '班级': '计算机11', '学号': '201101245'})
writer.writerow(
{'院系': '信息学院', '专业': '计算机科学与技术', '年级': '2011级', '学生类别': '本科(本科)4年', '班级': '计算机11', '学号': '201101275'})
4.示例代码
csv文件的拷贝
def copycsv(source, target):
csvtarget = open(target, 'w+')
with open(source, 'r') as csvscource:
reader = csv.reader(csvscource, delimiter=',')
for line in reader:
writer = csv.writer(csvtarget, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
writer.writerow(line)
csvtarget.close()
5.其他方式(numpy,pandas)
import numpy
my_matrix = numpy.loadtxt(open("num.csv", "rb"), delimiter=",", skiprows=0)
print(my_matrix)
import pandas as pd
obj=pd.read_csv('test.csv')
print obj
print type(obj)
print obj.dtypes
test.csv
院系,专业,年级,学生类别,班级,学号,姓名,学分成绩,更新时间,班级排名,参与班级排名总人数
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101244,栾,86.72,2017/9/5 9:59,1,27
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101237,刘,86.05,2017/9/5 9:59,2,27
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101233,刘,86.03,2017/9/5 9:59,3,27
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101250,李,85.43,2017/9/5 9:59,4,27
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101229,张,82.35,2017/9/5 9:59,5,27
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101241,韩,80.92,2017/9/5 9:59,6,27
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101232,丁,80.66,2017/9/5 9:59,7,27
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101228,张,79.61,2017/9/5 9:59,8,27
信息学院,计算机科学与技术,2011级,本科(本科)4年,计算机11,201101255,孟,79.55,2017/9/5 9:59,9,27
num.csv
1,2,3
4,5,6
7,8,9
6.完整代码
# coding:utf-8 import csv def testReader(file):
with open(file, 'r') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for row in spamreader:
print(', '.join(row)) def testWriter(file):
with open(file, 'w') 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']) def copycsv(source, target):
csvtarget = open(target, 'w+')
with open(source, 'r') as csvscource:
reader = csv.reader(csvscource, delimiter=',')
for line in reader:
writer = csv.writer(csvtarget, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
writer.writerow(line)
csvtarget.close() def testDictReader(file):
# 院系,专业,年级,学生类别,班级,学号,姓名,学分成绩,更新时间,班级排名,参与班级排名总人数
with open(file, 'rb') as csvfile:
dictreader = csv.DictReader(csvfile)
for row in dictreader:
print(' '.join([row['院系'], row['专业'], row['学号'], row['姓名']])) def testDictWriter(file):
with open(file, 'w') as csvfile:
fieldnames = ['院系', '专业', '年级', '学生类别', '班级', '学号']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow(
{'院系': '信息学院', '专业': '计算机科学与技术', '年级': '2011级', '学生类别': '本科(本科)4年', '班级': '计算机11', '学号': '201101245'})
writer.writerow(
{'院系': '信息学院', '专业': '计算机科学与技术', '年级': '2011级', '学生类别': '本科(本科)4年', '班级': '计算机11', '学号': '201101275'}) def testpandas_csv():
import pandas as pd obj = pd.read_csv('test.csv')
print obj
print type(obj)
print obj.dtypes def testnumpy_csv():
import numpy my_matrix = numpy.loadtxt(open("num.csv", "rb"), delimiter=",", skiprows=0)
print(my_matrix) if __name__ == '__main__':
# csvFile = 'test.csv'
# testReader(csvFile) # csvFile = 'test2.csv'
# testWriter(csvFile) # copycsv('test.csv', 'testcopy.csv') # testDictReader('test.csv') # testDictWriter('test2.csv')
testnumpy_csv() # testpandas_csv()
Python操作csv文件的更多相关文章
- 数学建模之Python操作csv文件
1.用Python通过csv文件里面的某一列,形成键值,然后统计键在其他列出现的次数. import pandas as pd import numpy as np import csv import ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- Python对csv文件的读写操作
python内置了csv模块,用它可以方便的操作csv文件. 1.写文件 (1)写文件的方法一 import csv # open 打开文件有多种模式,下面是常见的4种 # r:读数据,默认模式 # ...
- python中操作csv文件
python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...
- python操作csv和excel文件
1.操作csv文件 1).读取文件 import csv f=open("test.csv",'r') t_text=csv.reader(f) for t,i in t_text ...
- Python处理csv文件
Python处理csv文件 CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看.由于是纯文本,任何编辑器也都可打开.与Excel文件不同,CSV文件中: 值没 ...
- 使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python读写csv文件
文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...
- python操作txt文件中数据教程[4]-python去掉txt文件行尾换行
python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...
随机推荐
- 简述C/C++调用lua中实现的自定义函数
1.首先说下目的,为什么要这么做 ? 正式项目中,希望主程序尽量不做修改,于是使用C/C++完成功能的主干(即不需要经常变动的部分)用lua这类轻量级的解释性语言实现一些存在不确定性的功能逻辑:所以, ...
- Redis基本数据类型
-------------------Redis基本数据类型------------------- 1.String 字符串 1.概念 1.String 是redis最基本的类 ...
- 转载 远程用户连接mysql授权
授权法: 在安装mysql的机器上运行: 1.d:\mysql\bin\>mysql -h localhost -u root //这样应该可以进入MySQL服务器 2.mysql> ...
- Visual Studio2017数据库数据比较
一.前言 上一篇文章我们介绍了如何使用VS2017对SSMS数据库进行架构比较.这一篇文章我们将继续介绍如何对SSMS数据库的数据进行比较.数据的比较也是很常见的,比如我们要比较当前版本的数据库相对上 ...
- ASP.NET Core的身份认证框架IdentityServer4(8)- 使用密码认证方式控制API访问
前言 本文及IdentityServer这个系列使用的都是基于.net core 2.0的.上一篇博文在API项目中我使用了icrosoft.AspNetCore.Authentication.Jwt ...
- IntelliJ IDEA使用(一)基本设置与类、方法模板设置
其实之前一直开发都是在使用的是Eclipse,但是最近在做Maven项目的时候要用IntelliJ IDEA,据说这个idea功能非常的强大,最近在使用的时候发现如果适应的真的是非常的强大.感觉是比E ...
- Django1.10主题指南—模型
模型是你的数据的唯一的.权威的信息源.它包含你所储存数据的必要字段和操作行为.通常,每个模型都对应着数据库中的唯一一张表. 基础认识: 每个model都是一个继承 django.db.models.M ...
- 学会Git
学会Git 目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式 ...
- 使用 LVS 实现负载均衡原理及安装配置详解
负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...
- sudoku--SE第二次作业
git传送门 编译环境: windows10.vs2017 所用语言: c++ 首先作为一个晚上闭眼的玩家,我先来讲一下我的心路历程: 最开始接到作业的时候心里是拒绝的,刚出了一趟小远门就这样,就很难 ...