1.CSV
就是(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看。
由于是纯文本,任何编辑器也都可打开。
与Excel文件不同,CSV文件中:
1)值没有类型,所有值都是字符串
2)不能指定字体颜色等样式
3)不能指定单元格的宽高,不能合并单元格
4)没有多个工作表
2.在CSV文件中,以,作为分隔符,分隔两个单元格。
像这样a,,c表示单元格a和单元格c之间有个空白的单元格。依此类推。
不是每个逗号都表示单元格之间的分界。
所以即使CSV是纯文本文件,也坚持使用专门的模块进行处理。
Python内置了csv模块。先看看一个简单的例子。
3.从CSV文件中读取数据
import csvfilename = '/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv' #举例with open(filename) as f: reader = csv.reader(f) print(list(reader))
data不能直接打印,list(data)最外层是list,里层的每一行数据都在一个list中,有点像这样
[['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size'], ['16.99', '1.01', 'Female', 'No', 'Sun', 'Dinner', '2'], ['10.34', '1.66', 'Male', 'No', 'Sun', 'Dinner', '3'], ['21.01', '3.5', 'Male', 'No', 'Sun', 'Dinner', '3'], ['23.68', '3.31', 'Male', 'No', 'Sun', 'Dinner', '2'], ['24.59', '3.61', 'Female', 'No', 'Sun', 'Dinner', '4'], ['25.29', '4.71', 'Male', 'No', 'Sun', 'Dinner', '4'], ['8.77', '2', 'Male', 'No', 'Sun', 'Dinner', '2'], ['26.88', '3.12', 'Male', 'No', 'Sun', 'Dinner', '4'], ['15.04', '1.96', 'Male', 'No', 'Sun', 'Dinner', '2'], ['14.78', '3.23', 'Male', 'No', 'Sun', 'Dinner', '2'], ['10.27', '1.71', 'Male', 'No', 'Sun', 'Dinner', '2'], ['35.26', '5', 'Female', 'No', 'Sun', 'Dinner', '4'], ['15.42', '1.57', 'Male', 'No', 'Sun', 'Dinner', '2'], ['18.43', '3', 'Male', 'No', 'Sun', 'Dinner', '4'], ......]
这样数据打印出来,但是就像摊饼一样,不好看。
4.改一下代码
import csvfilename = '/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv' #举例with open(filename) as f: reader = csv.reader(f) for row in reader: # 行号从1开始 print(reader.line_num, row)
结果:
xgj@xgj-PC:~$ /usr/bin/python3.8 /home/xgj/Desktop/333333.py
1 ['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size']
2 ['16.99', '1.01', 'Female', 'No', 'Sun', 'Dinner', '2']
3 ['10.34', '1.66', 'Male', 'No', 'Sun', 'Dinner', '3']
4 ['21.01', '3.5', 'Male', 'No', 'Sun', 'Dinner', '3']
5 ['23.68', '3.31', 'Male', 'No', 'Sun', 'Dinner', '2']
6 ['24.59', '3.61', 'Female', 'No', 'Sun', 'Dinner', '4']
7 ['25.29', '4.71', 'Male', 'No', 'Sun', 'Dinner', '4']
......
5.写数据到csv文件中
有reader可以读取,当然也有writer可以写入。一次写入一行,一次写入多行都可以。
代码:
import csv#格式:['25.29', '4.71', 'Male', 'No', 'Sun', 'Dinner', '4']# 使用数字和字符串的数字都可以datas = [['28.88','5.21' ,'Male','Yes','Sun','Dinner','5']]with open('/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv', 'w', newline='') as f: writer = csv.writer(f) for row in datas: writer.writerow(row)
------
注意覆盖原来数据了,所以如果需要,请注意备份或者这是新建一份数据不是追加数据。
------
也可以一次性增加多行数据。
import csvdatas = [['28.88','5.21' ,'Male','Yes','Sun','Dinner','5'], ['29.88','5.21' ,'Male','Yes','Sun','Dinner','6'], ['30.88','5.21' ,'Male','Yes','Sun','Dinner','7'], ['31.88','5.21' ,'Male','Yes','Sun','Dinner','8'] ]with open('/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv', 'w', newline='') as f: writer = csv.writer(f) for row in datas: #writer.writerow(row) 增加一次数据的 writer.writerows(datas) #增加多行数据,数据重复4次
结果,图csv1
图csv2
如果不指定newline='',则每写入一行将有一空行被写入。
6.DictReader和DictWriter对象
使用DictReader可以像操作字典那样获取数据,把表的第一行(一般是标头)作为key。
可访问每一行中那个某个key对应的数据。
假设数据是图csv3
代码如下:
import csvfilename = '/home/xgj/xgjpython/seaborn/seaborn-data-master/test.csv'with open(filename) as f: reader = csv.DictReader(f) for row in reader: # total_bill是表第一行的某个数据,作为key max_temp = row['total_bill'] print(max_temp)
结果是图csv4
7.使用DictWriter类,可以写入字典形式的数据,同样键也是标头(表格第一行)。
代码如下:
import csvheaders = ['name', 'age']datas = [{'name':'Bob', 'age':23}, {'name':'Jerry', 'age':44}, {'name':'Tom', 'age':15} ]with open('/home/xgj/xgjpython/seaborn/seaborn-data-master/example.csv', 'w', newline='') as f: # 标头在这里传入,作为第一行数据 writer = csv.DictWriter(f, headers) writer.writeheader() for row in datas: writer.writerow(row)
结果图csv5
# 还可以写入多行
#writer.writerows(datas)