前言:
CSV(Comma-Separated Values)逗号分隔值文件格式 ,其文件以纯文本形式存储表格数据(数字和文本)。
csv文件格式是一种通用的电子表格和数据库导入导出格式。
写入:
1、csv.writer()对象:
csv.writer(csvfile,dialect='excel',**fmtparams),主要用于把列表数据写入到csv文件。
其中参数csvfile是任何支持write()方法的对象,通常为文件对象;dialect 和fmtparams与csv.reader对象构造函数中的参数意义相同。
csv.writer对象包含以下属性和方法:
writer.writerow(row) #方法,写入一行数据writer.writerows #方法,写入多行数据writer.dialect #只读属性,返回其dialect示例1: 使用writer对象写入csv文件
import csv def writecsv(csvfilepath):#列表方式写入 rows=[(100006,'小江','男','1班','77','79','80'),(100007,'小美','女','4班','77','88','80')] with open(csvfilepath,'a+',newline='')as csvfile: writer = csv.writer(csvfile,dialect='excel') writer.writerows(rows)#写入多行 print(writer.dialect) if __name__=='__main__': writecsv(r'E:\2018-12-19\scores.csv')2、csv.DictWriter对象
csv.DictWriter(csvfile,fieldnames,restval = '',extrasaction = 'raise',dialect = 'excel',*args,**kwds)
extrasaction用于指定多余字段时的操作,其他参数同上。
DictWriter对象的属性和方法:
# 方法: csvwriter.writerow(row) # 将row写入writer的文件对象,根据当前方言进行格式化。支持迭代 csvwriter.writerows(rows) # 将行中的所有元素写入编写器的文件对象,并根据当前方言进行格式化。支持迭代 DictWriter.writeheader() # 写入标题字段名 # 属性: csvwriter.dialect # 使用的方言只读描述
示例2: 使用DictWriter对象写入csv文件
import csv def writecsv2(csvfilepath): headers = ['学号','姓名','性别','班级','语文','数学','英语'] rows = [{'学号':'100001','姓名':'小鱼','性别':'男','班级':'1班','语文':'72','数学':'82','英语':'85'}, {'学号':'100002','姓名':'小高','性别':'女','班级':'6班','语文': '74', '数学': '88', '英语': '85'} ] with open(csvfilepath,'a+',newline='') as f: f_csv = csv.DictWriter(f,headers) f_csv.writerows(rows) if __name__=='__main__': writecsv2(r'E:\2018-12-19\scores.csv')读取:
1、csv.reader对象
csv.reader(csvfile,dialect='excel',**fmtparams),主要用于文件的读取,返回一个reader对象用于在csv文件内容上进行行迭代。
参数csvfile是文件对象或者list对象;dialect 用于指定csv的格式模式不同程序输出的csv格式有细微差别;fmtparams是一系列参数列表,主要用于设置特定的格式,以覆盖dialect中的格式。
csv.reader对象是可迭代对象,包含以下属性:
csv.reader().dialect #返回其dialectcsv.reader().line_num #f返回读入的行数示例3:使用reader对象读取csv文件scores.csv,文件内容如下:
学号,姓名,性别,班级,语文,数学,英语 100001,小雨,女,1班,72,85,87 100002,小雪,女,2班,67,87,77 100003,小宇,男,3班,88,78,78 100004,小天,男,1班,76,87,84 100005,小军,男,3班,79,86,83
import csv def readcsv(csvfilepath):#列表方式读取 with open(csvfilepath, 'r', newline='',encoding='utf-8') as csvfile: reader = csv.reader(csvfile)#创建csv.reader对象 for row in reader: # 读取出的内容是列表格式的 print(row) print(reader.line_num) if __name__=='__main__': readcsv(r'E:\2018-12-19\scores.csv') #输出 # ['学号', '姓名', '性别', '班级', '语文', '数学', '英语'] # ['100001', '小雨', '女', '1班', '72', '85', '87'] # ['100002', '小雪', '女', '2班', '67', '87', '77'] #....(略) # 62、csv.DictReader对象
使用csv.reader对象从csv文件读取数据,结果为列表对象row,需要通过索引row[i]访问。如果希望通过csv文件的首行标题字段名访问,则可以使用csv.DictReader对象读取。
csv.DictReader(csvfile,fieldnames=None,restkey=None,restval=None,dialect='excel',*args,**kwds)
其中,csvfile是文件对象或list对象;fieldnames用于指定字段名,如果没有指定,则第一行为字段名;restkey和restval用于指定字段名和数据个数不一致时所对应的字段名或数据值,其他参数同reader对象。
DictReader对象属性和方法:
# 方法: csv.DictReader().__next__()# 称之为next(reader) # 属性: csvreader.dialect # 解析器使用的方言的只读描述。 csvreader.line_num #返回读入的行数 csvreader.fieldnames #返回标题字段名
示例4 :使用DictReader对象读取csv文件
import csv def readcsv2(csvfilepath): with open(csvfilepath,newline='') as f: f_csv = csv.DictReader(f) for row in f_csv: print(row['姓名'],row['班级']) # print('fieldnames:',f_csv.fieldnames) # print('dialect:',f_csv.dialect) # print('line_num:',f_csv.line_num) if __name__=='__main__': readcsv2(r'E:\2018-12-19\scores.csv')转载自:https://www.cnblogs.com/wuxunyan/p/10442444.html