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文件来做实验

Python中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 

Python中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 

Python中CSV文件(逗号分割)实战操作指南

总结 

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容