Python程序中用csv模块来操作csv文件的基本使用教程
CSV全称为“CommaSeparatedValues”,是一种格式化的文件,由行和列组成,分隔符可以根据需要来变化。
如下面为一csv文件:
Title,ReleaseDate,Director AndNowForSomethingCompletelyDifferent,1971,IanMacNaughton MontyPythonAndTheHolyGrail,1975,TerryGilliamandTerryJones MontyPython'sLifeOfBrian,1979,TerryJones MontyPythonLiveAtTheHollywoodBowl,1982,TerryHughes MontyPython'sTheMeaningOfLife,1983,TerryJones
csv可以比较方便的在不同应用之间迁移数据。可以将数据批量导出为csv格式,然后倒入到其他应用程序中。很多应用中需要导出报表,也通常用csv格式导出,然后用Excel工具进行后续编辑。
打印发行日期及标题,逐行处理:
forlineinopen("samples/sample.csv"): title,year,director=line.split(",") printyear,title
使用csv模块处理:
importcsv reader=csv.reader(open("samples/sample.csv")) fortitle,year,directorinreader: printyear,title
改变分隔符
创建一csv.excel的子类,并修改分隔符为”;”
#File:csv-example-2.py importcsv classSKV(csv.excel): #likeexcel,butusessemicolons delimiter=";" csv.register_dialect("SKV",SKV) reader=csv.reader(open("samples/sample.skv"),"SKV") fortitle,year,directorinreader: printyear,title
如果仅仅仅是改变一两个参数,则可以直接在reader参数中设置,如下:
#File:csv-example-3.py importcsv reader=csv.reader(open("samples/sample.skv"),delimiter=";") fortitle,year,directorinreader: printyear,title
将数据存为CSV格式
通过csv.writer来生成一csv文件。
#File:csv-example-4.py importcsv importsys data=[ ("AndNowForSomethingCompletelyDifferent",1971,"IanMacNaughton"), ("MontyPythonAndTheHolyGrail",1975,"TerryGilliam,TerryJones"), ("MontyPython'sLifeOfBrian",1979,"TerryJones"), ("MontyPythonLiveAtTheHollywoodBowl",1982,"TerryHughes"), ("MontyPython'sTheMeaningOfLife",1983,"TerryJones") ] writer=csv.writer(sys.stdout) foritemindata: writer.writerow(item)
实例
下面我们来看一个比较完整的例子,代码说明在注释中:
importcsv #dialect是访问csv文件时需要指定的参数之一,用来确定csv文件的数据格式 #下面这个函数列举系统支持的dialect有哪些,默认值是'excel',用户也可 #以从Dialect派生一个类,使用该类的实例作为dialect参数。 printcsv.list_dialects() deftest_writer(): #csv文件必须以二进制方式open withopen('eggs.csv','wb')ascsvfile: spamwriter=csv.writer(csvfile) spamwriter.writerow(['Spam']*5+['BakedBeans']) spamwriter.writerow(['Spam','LovelySpam','WonderfulSpam']) deftest_reader(): withopen('eggs.csv','rb')ascsvfile: spamreader=csv.reader(csvfile) forrowinspamreader: printrow #sniffer用来推断csv文件的格式,不是很准确 deftest_sniffer(): withopen('eggs.csv','wb')ascsvfile: spamwriter=csv.writer(csvfile,delimiter='') spamwriter.writerow(['Spam']*2+['BakedBeans']) spamwriter.writerow(['Spam','LovelySpam','WonderfulSpam']) #通常你需要指定与写入者相同的文件格式才能正确的读取数据 withopen('eggs.csv','rb')ascsvfile: spamreader=csv.reader(csvfile,delimiter='') forrowinspamreader: print','.join(row) #如果不知道文件格式,sniffer就可以派上用场了 withopen('eggs.csv','rb')ascsvfile: #用sniffer推断文件格式,从而得到dialect dialect=csv.Sniffer().sniff(csvfile.read(1024)) printdialect.delimiter,dialect.quotechar #文件重新移动到头部 csvfile.seek(0) #用推断出来的dialect创建reader reader=csv.reader(csvfile,dialect) forrowinreader: print','.join(row)