csv的读写操作
cvs简介:
CSV
全称 Comma-Separated Values
,中文叫逗号分隔值或字符分隔值,它以纯文本形式存储表格数据(数字和文本),其本质就是一个字符序列,可以由任意数目的记录组成,记录之间以某种换行符分隔,每条记录由字段组成,通常所有记录具有完全相同的字段序列,字段间常用逗号或制表符进行分隔。CSV 文件格式简单、通用,在现实中有着广泛的应用,其中使用最多的是在程序之间转移表格数据。
1、READER:
csv.
reader
(csvfile, dialect='excel', **fmtparams):用于文件的读取, 返回一个reader 对象,
csvfile:文件对象或者list对象,如果 csvfile 是文件对象,则使用 newline=’’ 打开,:with open('eggs.csv', newline='') as csvfile
dialect :用于指定csv的格式模式不同程序输出的csv格式有细微差别;dialect 描述,只读,供 writer 使用
fmtparams:是一系列参数列表,主要用于设置特定的格式,以覆盖dialect中的格式。
Reader对象的公共属性:
csvreader.
dialect #返回其dialect
csvreader.
line_num #返回读入的行数
eg:用于读取文件:testtry.csv如下:
import csv with open('testtry.csv',newline='')as test: tsetreader = csv.reader(test) #创建csv.reader对象 for row in tsetreader: #读取出的内容是列表格式的 print(row)
2、csv.
writer
(csvfile, dialect='excel', **fmtparams):返回一个 writer 对象
,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。
writer对象的方法:
csvwriter.
writerow
(row) #写入一行数据
csvwriter.
writerows
(rows) #写入多行数据
writer对象的属性:
csvwriter.
dialect #属性,返回dialect
with open('testtry.csv', 'w', newline='') as csvfile: # csv文件原来存在的话,会覆盖点原来文件的内容 spamwriter = csv.writer(csvfile) #创建一个写对象 spamwriter.writerow(['李梅','18','96']) #写入一行 data = [( '张雨', '21','85'), ('李华', '20', '91')] spamwriter.writerows(data) # 写入多行
3、class csv.
DictReader
(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds):其中,csvfile是文件对象或list对象;fieldnames用于指定字段名,如果没有指定,则第一行为字段名;restkey和restval用于指定字段名和数据个数不一致时所对应的字段名或数据值,其他参数同reader对象。
# 属性:
csvreader.dialect # 解析器使用的方言的只读描述。
csvreader.line_num #返回读入的行数
csvreader.fieldnames #返回标题字段名
with open('testtry.csv', newline='') as csvfile: reader = csv.DictReader(csvfile) for row in reader: print(row['name'], row['age'],row['score']) print('fieldnames:',reader.fieldnames) # 读取标题字段,如果没有,则会读取文件的第一条记录 print('dialect:',reader.dialect) #解析器使用的方言的只读描述。 print('line_num:',reader.line_num) # 返回读入的行数 print(row) # 字典
4、class csv.
DictWriter
(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds) :extrasaction用于指定多余字段时的操作,其他参数同DictReader
fieldnames :一个字典keys的序列,用于标识writerow()方法传递字典中的值的顺序
restval :可选参数,用于字典在字段名中确实键时要写入的值
extrasaction :如果一个字典传递给writerow()方法在fieldnames中找不到键,extrasaction指示要采取的操作,
如果设置:'raise' (默认值), ValueError
is raised【ValueError
:当操作或函数接收到具有正确类型但不适当值的参数时引发,并且这种情况不会由更精确的异常(如IndexError)来描述】
如果设置:‘'ignore'’ ,忽略字典中的额外值
with open('names.csv', 'w', newline='') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() # 写入标题字段名 writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'}) #写入一行 rowdict =[{'first_name': 'Lovely', 'last_name': 'Spam'},{'first_name': 'Wonderful', 'last_name': 'Spam'}] writer.writerows(rowdict) #写入多行
5、写读追加状态
'r':读
'w':写
'a':追加
'r+' == r+w(可读可写,文件若不存在就报错(IOError))
'w+' == w+r(可读可写,文件若不存在就创建)
'a+' ==a+r(可追加可写,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就好啦:
'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+