Python操作csv文件

  • 1. What's CSV
  • 2. Write CSV
    • 2.1 list
    • 2.2 dict
  • 3. Read CSV
    • 3.1 list
    • 3.2 dict
  • 4. CSV空行问题解决
    • 4.1 Python2 解决
    • 4.2 Python3 解决

1. What’s CSV

CSV逗号分隔值(Comma-Separated Values,CSV,也称为字符分隔值,分隔字符也可以不是逗号)。

  1. 保存形式

其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。

  1. 分隔符号

CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号制表符

  1. 打开方式

通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用word或记事本来开启,再则先另存新档后用excel开启,也是方法之一。

2. Write CSV

2.1 list

使用列表生成csv

  • open()
#!/usr/bin/python3
# -*- coding: utf-8 -*-

# 导入CSV安装包
import csv

# 1. 创建文件对象
f = open('文件名.csv','w',encoding='utf-8')

# 2. 基于文件对象构建 csv写入对象
csv_writer = csv.writer(f)

# 3. 构建列表头
csv_writer.writerow(["姓名","年龄","性别"])

# 4. 写入csv文件内容
csv_writer.writerow(["l",'18','男'])
csv_writer.writerow(["c",'20','男'])
csv_writer.writerow(["w",'22','女'])

# 5. 关闭文件
f.close()

一维列表数据,直接for循环写入

注意:最后一定 file.close():关闭文件流,确保写入数据成功。

  • with()
import csv
keys=['a','b','c','d']
data=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
with open('data.csv','w') as file:
	writer=csv.writer(file) # 建立csv写入对象
	writer.writerow(keys) # 调用writerow函数写入一行数据(表头)
	for row in data:
		writer.writerow(row)

若写入的数据是二维列表,可以使用 writerows() 方法一次写入多行。

with open('data.csv','w') as file:
	writer=csv.writer(file)
	writer.writerow(keys)
	writer.writerows(data)

2.2 dict

字典生成csv

import csv

data=[{'a':1,'b':2,'c':3},{'a':4,'b':5,'c':6},{'a':7,'b':8,'c':9}]
fieldnames=['a', 'b', 'c']  # 列名列表,即字典的key值列表
with open('data.csv','w', newline='') as file:
	writer = csv.DictWriter(file, fieldnames=fieldnames)  # 建立一个字典写入对象,并指定列名fieldnames
	writer.writeheader()  # writeheader()生成表头即列名 filednames
	writer.writerows(data)  # 一次写入多行,也可使用writerow()写入单行(for循环)

3. Read CSV

3.1 list

将csv读取为列表

with open('data.csv','r') as file:
	reader = csv.reader(file)
	for row in reader:
		print(row)	
['a', 'b', 'c']
['1', '2', '3']
['4', '5', '6']
['7', '8', '9']

可以使用 list.append(),整合每行数据

3.2 dict

data=[]
with open('data.csv','r') as file:
	reader = csv.DictReader(file)
	fieldnames = reader.fieldnames  # 获取表头
	print(fieldnames)
	for row in reader:  # 获取每一行数据
		data.append(dict(row))
	print(data)
['a', 'b', 'c']
[{'a': '1', 'b': '2', 'c': '3'}, {'a': '4', 'b': '5', 'c': '6'}, {'a': '7', 'b': '8', 'c': '9'}]

4. CSV空行问题解决

4.1 Python2 解决

将写入方式w,修改成wb

f = open('文件名.csv', 'wb', encoding='utf-8')

4.2 Python3 解决

Python2的解决方式也支持,同时也可以添加参数newline=' '即可,如下所示:

f = open('文件名.csv', 'wb', encoding='utf-8', newline='')

参考:

link

link

加油!

感谢!

努力!

更多推荐

【超详解】Python读写csv文件及空行问题解决