Python-CSV文件逗号分割操作
目录
Python CSV文件(逗号分割)操作
一、csv文件介绍
1、csv文件简介
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。
2、为什么要使用csv文件
在Linux中我们可以通过命令在数据库中把表导出来为csv结尾的文件,其实就是以逗号分割分txt文件,此文件我们可以在windows中打开并且为表格的形式,方便我们进行查看与再次操作。
eg:
MariaDB [test]> select * from 表名 into outfile "/tmp/test.csv" fields terminated by ",";
二、csv文件查看
注意:这里我是把csv文件和python代码都放在同级目录,否则要指定路径!!!
1、测试文件创建
(1)这里我们以windows中的csv文件来做实验
(2)我们可以选中内容复制进去,也可以上传到linux中,这里我们选择前者
[root@python _test]# vim test.csv # 复制进去的是以空格为分隔符
id username passwd age
1 dream1 123 21
2 dream2 456 22
3 dream3 789 23
# 把空格替换为逗号
[root@python _test]# sed -i 's/\s\+/,/g' test.csv
2、查看csv文件(列表)
(1)读出结果
[root@python _test]# vim _test.py
#!/usr/bin/env python
#coding:utf-8
import csv
with open('test.csv', encoding="utf-8") as f:
reader = csv.reader(f)
print(reader)
print(list(reader))
查看结果:
[root@python _test]# python _test.py
<_csv.reader object at 0x7f54d9a01eb8>
[['id', 'username', 'passwd', 'age'], ['1', 'dream1', '123', '21'], ['2', 'dream2', '456', '22'], ['3', 'dream3', '789', '23']]
(2)遍历(从第一行读取)
[root@python _test]# vim _test.py
#!/usr/bin/env python
#coding:utf-8
import csv
with open('test.csv', encoding="utf-8") as f:
reader = csv.reader(f)
for i in reader:
print(reader.line_num, i)
查看结果:
[root@python _test]# python _test.py
1 ['id', 'username', 'passwd', 'age']
2 ['1', 'dream1', '123', '21']
3 ['2', 'dream2', '456', '22']
4 ['3', 'dream3', '789', '23']
(2)遍历(从第二行读取)
[root@python _test]# vim _test.py
#!/usr/bin/env python
#coding:utf-8
import csv
with open('test.csv', encoding="utf-8") as f:
reader = csv.reader(f)
# 表头
next(reader)
for i in reader:
print(reader.line_num, i)
查看结果:
[root@python _test]# python _test.py
2 ['1', 'dream1', '123', '21']
3 ['2', 'dream2', '456', '22']
4 ['3', 'dream3', '789', '23']
3、查看csv文件(字典)
(1)查看
[root@python _test]# vim _test.py
#!/usr/bin/env python
#coding:utf-8
import csv
with open('test.csv', encoding="utf-8") as f:
reader = csv.DictReader(f)
# 表头
print (reader.fieldnames)
print (reader,type(reader))
for i in reader:
print (i)
查看结果:
[root@python _test]# python _test.py
['id', 'username', 'passwd', 'age']
<csv.DictReader object at 0x7f3b02213a20> <class 'csv.DictReader'>
OrderedDict([('id', '1'), ('username', 'dream1'), ('passwd', '123'), ('age', '21')])
OrderedDict([('id', '2'), ('username', 'dream2'), ('passwd', '456'), ('age', '22')])
OrderedDict([('id', '3'), ('username', 'dream3'), ('passwd', '789'), ('age', '23')])
(2)查看第一列(id)
优点:我们不知道表头在具体那列,我们可以通过表头名来获取整列数据,即我们可以随便调整顺序也不会影响我们的数据读取!!!
[root@python _test]# vim _test.py
#!/usr/bin/env python
#coding:utf-8
import csv
with open('test.csv', encoding="utf-8") as f:
reader = csv.DictReader(f)
for i in reader:
print (i['id'])
查看结果:
[root@python _test]# python _test.py
1
2
3
4、写入文件(列表)
[root@python _test]# vim _test.py
#!/usr/bin/env python
#coding:utf-8
import csv
li = [["id","user","性别"],["1","dreamya1","男"],["2","dreamya2","女"]]
with open('user.csv', 'w', newline='') as f:
writer = csv.writer(f)
for i in li:
writer.writerow(i)
查看结果:
[root@python _test]# python _test.py
[root@python _test]# cat user.csv
id,user,性别
1,dreamya1,男
2,dreamya2,女
下载到windows中查看:
[root@python _test]# sz user.csv
5、写入文件(字典)
[root@python _test]# vim _test.py
import csv
#coding:utf-8
headers = ['id', 'username','passwd']
li = [{'id':'1','username':'dream1','passwd':'123'},
{'id':'2','username':'dream2','passwd':'456'},
]
with open('user.csv', 'w', newline='') as f:
# 表头传入
writer = csv.DictWriter(f, headers)
writer.writeheader()
# 一行一行写入
for i in li:
writer.writerow(i)
# 直接把li写入(多行)
writer.writerows(li)
查看结果:
[root@python _test]# python _test.py
[root@python _test]# cat user.csv
id,username,passwd
1,dream1,123
2,dream2,456
1,dream1,123
2,dream2,456
windows中查看:
[root@python _test]# sz user.csv