python中csv模块用法(详细)tcy
发布日期:2021-06-29 14:48:20
浏览次数:3
分类:技术文章
本文共 7823 字,大约阅读时间需要 26 分钟。
python csv模块
# CSV以纯文本存储数和文本。文件的每一行就代表一条数据,每条记录包含由逗号分隔一个或多个属性值。
1.说明:1) 默认读写用逗号做分隔符(delimiter),双引号作引用符(quotechar)2) 用writer写数据None被写成空字符串,浮点型调用repr()转化成字符串。非字符串型数据被str()成字符串存储。3) open函数 import locale ; locale.getpreferredencoding()# 查看本地编码'cp936' open('some.csv', newline='', encoding='utf-8') # 使用系统默认编码将文件解码为unicode可使用不同的编码解码文件 # 如果newline=''没有指定,嵌入引用字段内换行符将不会被正确地解释4)RFC 4180 提供了一些标准: # 内容为纯文本;包含记录 # 每条记录是用单个分隔字符将各属性分隔 # 每条记录的属性序列是相同的pandas可以通过PyPI的 pip安装 。
2.模块内容 2.1模块常量:引用约定quoting=csv.QUOTE_MINIMAL =0 # writer对象只引用那些包含特殊字符quoting=csv.QUOTE_ALL=1 # writer对象引用所有字段 # 如字段分隔符,quotechar或任何字符 lineterminator。quoting=csv.QUOTE_NONNUMERIC=2 # writer对象引用所有非数字字段。 # 指示读者将所有非引用字段转换为float类型。quoting=csv.QUOTE_NONE=3,escapechar='$'# writer对象不引用字段 # 如未设置escapechar错误抛出;指示reader不对引号字符执行特殊处理。
2.21.函数:csv.reader(f,dialect ='excel',** fmtparams )# 返回一个读取器对象,它将迭代给定csv文件中的行。 # 属性: csv.reader().dialect csv.reader().line_numcsv.writer(f,dialect ='excel',** fmtparams ) # 返回一个编写器对象,负责将用户的数据转换为给定类文件对象上的分隔字符串 # 属性方法: writer.writerow writer.writerows writer.dialectcsv.DictReader()#字典读 # 方法: csv.DictReader().__next__()# 称之为next(reader) # 属性: csvreader.dialect # 解析器使用的方言的只读描述。 csvreader.line_num # 从源迭代器读取的行数。这与返回的记录数不同,因为记录可以跨越多行。 csvreader.fieldnames# 从文件中读取第一条记录时初始化此属性csv.DictWriter() # 方法: csvwriter.writerow(row) # 将row写入writer的文件对象,根据当前方言进行格式化。支持迭代 csvwriter.writerows(rows)# 将行中的所有元素写入编写器的文件对象,并根据当前方言进行格式化。支持迭代 DictWriter.writeheader() # 公共方法:用字段名称写一行 # 属性: csvwriter.dialect # 使用的方言只读描述
2.22函数-方言
csv.register_dialect(name [,dialect [,** fmtparams ] ] ) # 将方言与名称联系起来。 name必须是一个字符串。 # 方言可通过传递子类Dialect或fmtparams关键字参数或两者来指定,并使用关键字参数覆盖方言的参数。csv.unregister_dialect(name) # 从方言注册表中删除与名称关联的方言。名称不存在抛出错误csv.get_dialect(name) # 返回与姓名相关的方言,不可变的 Dialect。名称不存在抛出错误。csv.list_dialects() # 返回所有已注册方言的名称。csv.field_size_limit([ new_limit ] ) # 返回解析器允许的当前最大字段大小。如果给出new_limit,则这将成为新限制。
2.23类:
class csv.Dialect # 用来定义一个特定参数的容器类 reader或writer实例。 class csv.excel # 在excel类定义的Excel生成的通常性质CSV 文件。它以方言名称注册'excel'。 class csv.excel_tab # 定义Excel生成的制表符分隔的文件的通常的性质。它以方言名称注册'excel-tab'。 class csv.unix_dialect # 定义UNIX系统上的CSV,即使用生成的文件'\n'作为线路终端机和引用的所有字段。它以方言名称注册'unix' class csv.Sniffer # 在Sniffer类用于推导的格式CSV文件。 Sniffer类方法: sniff(sample, delimiters=None) # 分析给定的样本并返回Dialect反映找到的参数的子类。 # 如果给出了可选的delimiters参数,则将其解释为包含可能的有效分隔符的字符串。 has_header(sample) # 分析示例文本(假定为CSV格式), True如果第一行显示为一系列列标题,则返回。
3.1实例:读取字符串
for row in csv.reader(['one,two,three']): print(row)# ['one', 'two', 'three']
3.2实例:读写
实例1.1:读取CSV文件的最简单示例:with open('some.csv', newline='') as f: reader = csv.reader(f) for row in reader:print(row)实例1.2:相应的最简单的写作示例是:import csvwith open('some.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerows(someiterable)
实例2.1:写数据with open('test_csv_data.csv', 'w', newline='') as f: writer = csv.writer(f, delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL) writer.writerow(['My name is','Tom', 'Bob', 'Jim', 'May']) writer.writerow(['Color is', 'red', 'yellow green','blue'])实例2.2:读数据with open('test_csv_data.csv', newline='') as f: spamreader = csv.reader(f, delimiter=' ', quotechar='|') for row in spamreader: print(', '.join(row))# My name is, Tom, Bob, Jim, May# Color is, red, yellow green, blue
实例3.1:写入csv文件with open('csv_test.csv', 'w',newline='') as f:# 如不指定newline='',有时则每写入一行将有一空行被写入 writer = csv.writer(f) writer.writerow(['name', 'age', 'tel']) # 写入一行用writerowdata = [('Tom', '25', '1367890900'), ('Jim', '18', '1367890800')]writer.writerows(data) # 多行用writerows实例3.2:读取with open('csv_test.csv', encoding='utf-8') as f: csv_reader = csv.reader(f) for row in csv_reader: print(row)# ['name', 'age', 'tel']# ['Tom', '25', '1367890900']# ['Jim', '18', '1367890800']
3.3字典读写
# 实例1:字典方式写datas = [{'name': 'Bob', 'age': 23},{'name': 'Jerry', 'age': 44},{'name': 'Tom', 'age': 15} ]with open('test_csv_data.csv', 'w', newline='') as f: writer = csv.DictWriter(f, ['name', 'age'])# 标头在这里传入,作为第一行数据 writer.writeheader() for row in datas: writer.writerow(row) # 还可以写入多行 writer.writerows(datas)# 实例2:字典方式读import csvwith open('test_csv_data.csv','r') as f: reader = csv.DictReader(f) for row in reader: print(row['name'], row['age'])# name,age# Bob,23# Jerry,44# Tom,15# Bob,23# Jerry,44# Tom,15
3.4csv文件格式# 方法1:定义csv.Dialect的一个子类(如专门的分隔符、字符串引用约定、行结束符等) :class my_dialect(csv.Dialect): lineterminator = '\n' delimiter = ';' quotechar = '"' reader = csv. reader (f , diaect=my_dialect) # 方法2:各个csv方法的参数以关键字的形式提供给c sv.reader : reader= csv.reader(f, delimiter='|')
3.5注册新方言: csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)with open('passwd', newline='') as f: reader = csv.reader(f, 'unixpwd')
3.6捕获和报告错误: import csv, sysfilename = 'some.csv'with open(filename, newline='') as f: reader = csv.reader(f)try: for row in reader: print(row)except csv.Error as e: sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))
3.7示例Sniffer: with open('test_csv_data.csv', newline='') as f: dialect = csv.Sniffer().sniff(f.read(1024)) f.seek(0) reader = csv.reader(f, dialect,delimiter=' ',quotechar='|', quoting=csv.QUOTE_NONE,escapechar='$') # process CSV file contents here for i in reader: print(i)# ['name is', 'age', 'weight', 'remark']# ['Tom', '25', '31.2', '$te|st']# ['Jim', '35', '42.8', '$test$st']
3.8实例:dialect
f=open('test_csv_data.csv', newline='')spamreader = csv.reader(f, delimiter=' ', quotechar='|')spamreader.dialect,spamreader.line_numdialect=spamreader.dialectdialect.delimiter #分隔字段的单字符字符串 #' 'dialect.doublequote#如何处理字段内的引用符号。如果为True ,则双写 #1dialect.escapechar #用于对分隔符进行转义的字符串=None禁用 #dialect.lineterminator #用于写操作的行结束符 # '\r\n'dialect.quotechar #用于带有特殊字符(如分隔符)的字段的引用符号 #'|'dialect.quoting #引用约定 # 0dialect.skipinitialspace#忽略分隔符后面的空白符。默认为False # 0dialect.strict #如何处理字段内的引用符号 # 0
3.9实例:- 引用约定
使用备用格式读取文件 with open('test_csv_data.csv', 'w', newline='') as f: writer = csv.writer(f, delimiter=' ',quotechar='|', quoting=csv.QUOTE_NONE,escapechar='$') writer.writerow(['name is','age', 'weight', 'remark']) writer.writerow(['Tom', 25, 31.2,'$te|st']) writer.writerow(['Jim', 35, 42.8,'$test$st'])
quoting=csv.QUOTE_ALL,escapechar=None# 指示writer对象引用所有字段。 # |name is| |age| |weight| |remark|# |Tom| |25| |31.2| |$te||st|# |Jim| |35| |42.8| |$test$st|quoting=csv.QUOTE_MINIMAL,escapechar=None# 指示writer对象只引用那些包含特殊字符,如字段分隔符,quotechar或任何字符 lineterminator。 # |name is| age weight remark# Tom 25 31.2 |$te||st|# Jim 35 42.8 $test$st quoting=csv.QUOTE_NONNUMERIC,escapechar=None# 指示writer对象引用所有非数字字段。指示读者将所有非引用字段转换为float类型。 # |name is| |age| |weight| |remark|# |Tom| 25 31.2 |$te||st|# |Jim| 35 42.8 |$test$st| quoting=csv.QUOTE_NONE,escapechar='$'# 指示writer对象不引用字段。当输出数据中出现当前分隔符时,它前面是当前的escapechar字符。# 如果未设置escapechar错误抛出;指示reader不对引号字符执行特殊处理。 # name$ is age weight remark# Tom 25 31.2 $$te$|st# Jim 35 42.8 $$test$$st
4.备注
参数 | 说明 |
delimiter | 用于分隔字段的单字符字符串。默认为"," |
lineterminator | 用于写操作的行结束符,默认为“'\r\n ' 。读操作将忽略此选项,它能认出跨平台的行结束符 |
quotechar | 用于带有特殊字符(如分隔符)的字段的引用符号。默认为' " ' |
quoting | 引用约定。可选值包括csv.QUOTE _ ALL (引用用所有字段) |
csv.QUOTE_MINIMAL(引用如分隔符之类特殊字符的字段)默认 | |
csv.QUOTE_NONNUMERIC | |
csv.QUOTE_NON (不引用) | |
skipinitialspace | 忽略分隔符后面的空白符。默认为False |
doublequote | 如何处理字段内的引用符号。如果为True ,则双写。 |
escapechar | 用于对分隔符进行转义的字符串(如quoting=csv.QUOTE_NONE默认禁用 |
转载地址:https://chunyou.blog.csdn.net/article/details/85228189 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月03日 19时14分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
推荐算法:基于物品的协同过滤算法
2019-04-29
docker系列3:docker搭建CDH集群[单机单节点]
2019-04-29
ubuntu 16:使用系统自带的中文输入法
2019-04-29
k8s单机版[ microk8s ]
2019-04-29
docker系列6 :k8s集群[ 解压安装 ]
2019-04-29
maven- idea: 打包可执行jar
2019-04-29
docker系列2: windows安装docker
2019-04-29
hbase数据转移: 导入导出
2019-04-29
docker系列7: docker搭建mysql
2019-04-29
windows server 2012设置远程连接断开后自动注销
2019-04-29
python基础:list,map,open()文件读写
2019-04-29
Go面向对象-接口
2019-04-29
Go-多路选择和超时控制
2019-04-29
Go-channel的关闭和广播
2019-04-29
Go-任务的取消
2019-04-29
AIX 作为Web Server 使用时,tcp相关的几个参数调整
2019-04-29
自我学习37:请描述一下网页从开始请求到最后展示的完整过程
2019-04-29
自我学习38:如何区分前后端BUG
2019-04-29
自我学习39:接口自动化测试用例&功能测试用例区别
2019-04-29
mirror去兔子补丁下载 附安装教程
2019-04-29