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(ffieldnames = Nonerestkey = Nonerestval = Nonedialect ='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(ffieldnamesrestval =“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文件的更多相关文章

  1. 数学建模之Python操作csv文件

    1.用Python通过csv文件里面的某一列,形成键值,然后统计键在其他列出现的次数. import pandas as pd import numpy as np import csv import ...

  2. python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件

    python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...

  3. Python对csv文件的读写操作

    python内置了csv模块,用它可以方便的操作csv文件. 1.写文件 (1)写文件的方法一 import csv # open 打开文件有多种模式,下面是常见的4种 # r:读数据,默认模式 # ...

  4. python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  5. python操作csv和excel文件

    1.操作csv文件 1).读取文件 import csv f=open("test.csv",'r') t_text=csv.reader(f) for t,i in t_text ...

  6. Python处理csv文件

    Python处理csv文件 CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看.由于是纯文本,任何编辑器也都可打开.与Excel文件不同,CSV文件中: 值没 ...

  7. 使用Python读写csv文件的三种方法

    Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...

  8. python读写csv文件

    文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...

  9. python操作txt文件中数据教程[4]-python去掉txt文件行尾换行

    python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...

随机推荐

  1. 【拦截器】HandlerInterceptor接口

    package org.springframework.web.servlet; import javax.servlet.http.HttpServletRequest; import javax. ...

  2. Android项目实战(三十四):蓝牙4.0 BLE 多设备连接

    最近项目有个需求,手机设备连接多个蓝牙4.0 设备 并获取这些设备的数据. 查询了很多资料终于实现,现进行总结. ------------------------------------------- ...

  3. Webservice优缺点总结

    优点: 1 .采用xml支持跨平台远程调用. 2.基于http的soap协议,可跨越防火墙. (因为SOAP一般使用HTTP协议,而服务器的这个协议一般都是开放的,而且是可以穿过防火墙的) 3.支持面 ...

  4. 汇编指令-str存储指令(4)

    str -(Store Register)存储指令 格式:str{条件}  源寄存器,<存储器地址>将源寄存器中数据存到存储器地址中. 实例1: str   r1,[r2]        ...

  5. javascript中用setAttribute给元素添加colspan属性无效

    先附上代码 var tr=document.createElement('TR'); var td=document.createElement('TD'); td.setAttribute('col ...

  6. 汽车VIN码识别适用于什么行业

    在您看完之前的文章知道了VIN码识别的原理,现在跟大家分享一下汽车VIN码识别的应用场景吧 汽车VIN码不仅在制造.销售.保养.保险.交易环节会需要录入汽车的VIN码,在交通事故处理中,作为汽车身份唯 ...

  7. 团队作业4——第一次项目冲刺 tHiRd DaY

    项目冲刺--Triple Kill 小编又来了,好困呐,上了一天的课还要写博客,为什么写博客的一直是我呢..一点乐子都没有*-* 但是我还是得写啊[我也很无奈啊],那就让我给大家找点乐子吧 天霸动霸. ...

  8. SNS团队Beta阶段第一次站立会议(2017.05.22)

    1.立会照片 2.每个人的工作 成员任务分工: 成员 今天已完成的工作 明天计划完成的工作 罗于婕 修改之前的文档 界面优化  龚晓婷 修改之前的文档 界面优化 林仕庄 修复不能发音bug  界面图标 ...

  9. 【Alpha】——Fifth Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 测试统计功能 对统计出现的问题进一步完善 郑靖涛 着手编写报表设计 继续报表设计 杨海亮 协助编写统计功能 ...

  10. 201521123013 《Java程序设计》第7周学习总结

    1. 本章学习总结 2. 书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boolean contains(Object o) { r ...