python中csv模块⽤法(详细)tcy python csv模块
# CSV以纯⽂本存储数和⽂本。⽂件的每⼀⾏就代表⼀条数据,每条记录包含由逗号分隔⼀个或多个属性值。
1.说明:
1) 默认读写⽤逗号做分隔符(delimiter),双引号作引⽤符(quotechar)
2) ⽤writer写数据None被写成空字符串,浮点型调⽤repr()转化成字符串。⾮字符串型数据被str()成字符串存储。
3) open函数
import locale ; preferredencoding()# 查看本地编码'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.writer(f,dialect ='excel',** fmtparams ) # 返回⼀个编写器对象,负责将⽤户的数据转换为给定类⽂件对象上的分隔字符串 # 属性⽅法:
writer.writerow
writer.writerows
writer.dialect
csv.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函数-⽅⾔
# 将⽅⾔与名称联系起来。 name必须是⼀个字符串。
# ⽅⾔可通过传递⼦类Dialect或fmtparams关键字参数或两者来指定,并使⽤关键字参数覆盖⽅⾔的参数。
csv.unregister_dialect(name)
# 从⽅⾔注册表中删除与名称关联的⽅⾔。名称不存在抛出错误
<_dialect(name)
# 返回与姓名相关的⽅⾔,不可变的 Dialect。名称不存在抛出错误。
csv.list_dialects()
# 返回所有已注册⽅⾔的名称。
csv.field_size_limit([ new_limit ] )
# 返回解析器允许的当前最⼤字段⼤⼩。如果给出new_limit,则这将成为新限制。
2.23类:
class csv.Dialect
# ⽤来定义⼀个特定参数的容器类 reader或writer实例。
l
# 在excel类定义的Excel⽣成的通常性质CSV ⽂件。它以⽅⾔名称注册'excel'。
l_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 ader(['one,two,three']):
python怎么读csv数据print(row)# ['one', 'two', 'three']
3.2实例:读写
实例1.1:读取CSV⽂件的最简单⽰例:
with open('some.csv', newline='') as f:
reader = ader(f)
for row in reader:print(row)
实例1.2:相应的最简单的写作⽰例是:
import csv
with 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 = ader(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']) # 写⼊⼀⾏⽤writerow
data = [('Tom', '25', '1367890900'), ('Jim', '18', '1367890800')]
writer.writerows(data) # 多⾏⽤writerows
实例3.2:读取
with open('csv_test.csv', encoding='utf-8') as f:
csv_reader = ader(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 csv
with 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⽅法的参数以关键字的形式提供给ader :
reader= ader(f, delimiter='|')
3.5注册新⽅⾔:
with open('passwd', newline='') as f:
reader = ader(f, 'unixpwd')
3.6捕获和报告错误:
import csv, sys
filename = 'some.csv'
with open(filename, newline='') as f:
reader = ader(f)
try:
for row in reader:
print(row)
except csv.Error as e:
3.7⽰例Sniffer:
with open('test_csv_data.csv', newline='') as f:
dialect = csv.Sniffer().ad(1024))
f.seek(0)
reader = ader(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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论