CSV(Comma-SeparatedValues)即逗号分隔值,可以用Excel打开查看。由于是纯文本,任何编辑器也都可打开。与Excel文件不同,CSV文件中:
值没有类型,所有值都是字符串 不能指定字体颜色等样式 不能指定单元格的宽高,不能合并单元格 没有多个工作表 不能嵌入图像图表在CSV文件中,以,作为分隔符,分隔两个单元格。像这样a,,c表示单元格a和单元格c之间有个空白的单元格。依此类推。
不是每个逗号都表示单元格之间的分界。所以即使CSV是纯文本文件,也坚持使用专门的模块进行处理。Python内置了csv模块。先看看一个简单的例子。
data不能直接打印,list(data)最外层是list,里层的每一行数据都在一个list中,有点像这样
[[name,age],[Bob,14],[Tom,23],...]于是我们可以这样访问到Bob的年龄reader[1][1],在for循环中遍历如下
importcsv filename=F:/JupyterNotebook/matplotlib_pygal_csv_json/sitka_weather_2014.csvwithopen(filename)asf:reader=csv.reader(f)forrowinreader:#行号从1开始print(reader.line_num,row)截取一部分输出
1[AKST,MaxTemperatureF,MeanTemperatureF,MinTemperatureF,MaxDewPointF,MeanDewPointF,MinDewpointF,MaxHumidity,MeanHumidity,MinHumidity,MaxSeaLevelPressureIn,MeanSeaLevelPressureIn,MinSeaLevelPressureIn,MaxVisibilityMiles,MeanVisibilityMiles,MinVisibilityMiles,MaxWindSpeedMPH,MeanWindSpeedMPH,MaxGustSpeedMPH,PrecipitationIn,CloudCover,Events,WindDirDegrees]2[2014-1-1,46,42,37,40,38,36,97,86,76,29.95,29.77,29.57,10,8,2,25,14,36,0.69,8,Rain,138]...前面的数字是行号,从1开始,可以用reader.line_num获取。
要注意的是,reader只能被遍历一次。由于reader是可迭代对象,可以使用next方法一次获取一行。
importcsv filename=F:/JupyterNotebook/matplotlib_pygal_csv_json/sitka_weather_2014.csvwithopen(filename)asf:reader=csv.reader(f)#读取一行,下面的reader中已经没有该行了head_row=next(reader)forrowinreader:#行号从2开始print(reader.line_num,row)有reader可以读取,当然也有writer可以写入。一次写入一行,一次写入多行都可以。
importcsv #使用数字和字符串的数字都可以 datas=[[name,age],[Bob,14],[Tom,23],[Jerry,18]]withopen(example.csv,w,newline=)asf:writer=csv.writer(f)forrowindatas:writer.writerow(row)#还可以写入多行writer.writerows(datas)如果不指定newline=,则每写入一行将有一空行被写入。上面的代码生成如下内容。
name,age Bob,14 Tom,23 Jerry,18 name,ageBob,14Tom,23Jerry,18使用DictReader可以像操作字典那样获取数据,把表的第一行(一般是标头)作为key。可访问每一行中那个某个key对应的数据。
importcsv filename=F:/JupyterNotebook/matplotlib_pygal_csv_json/sitka_weather_2014.csvwithopen(filename)asf:reader=csv.DictReader(f)forrowinreader:#MaxTemperatureF是表第一行的某个数据,作为keymax_temp=row[MaxTemperatureF]print(max_temp)使用DictWriter类,可以写入字典形式的数据,同样键也是标头(表格第一行)。
importcsv headers=[name,age]datas=[{name:Bob,age:23},{name:Jerry,age:44},{name:Tom,age:15}]withopen(example.csv,w,newline=)asf:#标头在这里传入,作为第一行数据writer=csv.DictWriter(f,headers)writer.writeheader()forrowindatas:writer.writerow(row)#还可以写入多行writer.writerows(datas)就先了解到这儿。
本文内容总结:Python处理csv文件,从CSV文件中读取数据,写数据到csv文件中,DictReader和DictWriter对象,
原文链接:https://www.cnblogs.com/yanglang/p/7126660.html