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




python写入csv的数据带有中括号 python在csv文件中写入一行_数据


图csv2


python写入csv的数据带有中括号 python在csv文件中写入一行_python_02


如果不指定newline='',则每写入一行将有一空行被写入。

6.DictReader和DictWriter对象

使用DictReader可以像操作字典那样获取数据,把表的第一行(一般是标头)作为key。

可访问每一行中那个某个key对应的数据。

假设数据是图csv3


python写入csv的数据带有中括号 python在csv文件中写入一行_数据_03


代码如下:

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


python写入csv的数据带有中括号 python在csv文件中写入一行_python_04


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


python写入csv的数据带有中括号 python在csv文件中写入一行_python写入csv的数据带有中括号_05


# 还可以写入多行

#writer.writerows(datas)