🍀 前言
博客地址:
- CSDN:https://blog.csdn.net/powerbiubiu
👋 简介
本章节介绍使用 CSV 文件来存储数据,CSV 文件是一种常见的数据格式,可以用来存储和交换表格数据。CSV 文件由一系列的行组成,每行包含一些用逗号分隔的字段。CSV 文件可以用文本编辑器或excel打开和编辑,也可以用编程语言进行预处理。Python 常见操作 CSV 文件的方式由 csv 模块和 pandas 模块,本章主要讲解 csv模块。
📖 正文
1 使用CSV
1.1 导入模块
import csv
1.2 写入操作
如果test.csv文件不存在,则创建,newline=''
可以避免数据写入文件的时候,每一行数据之间存在空行,以下方式通过一行一行添加:
# newline=''可以避免空行
with open('test.csv', 'w', newline='', encoding='utf-8') as f:# 创建一个csv.writer对象,指定分隔符为逗号writer = csv.writer(f, delimiter=',')# 写入一些数据,每个元素是一个列表,表示一行数据writer.writerow(['name', 'age', 'gender'])writer.writerow(['张三', '18', '男'])writer.writerow(['李四', '19', '女'])
通过文本编辑器打开文件,显示的内容为:
使用excel打开文件,显示的内容为:
Tips:
1、使用with open操作时,同样支持追加a
模式
2、避免文件被打开的时候代码执行添加操作,程序会报错
同样的,我们还可以通过创建 CSV 写入器来一次性将更多的数据写入文件中,结果与一行一行的写入效果是一样的。
data = [['name', 'age', 'gender'],['张三', '18', '男'],['李四', '19', '女']
]
# 打开 CSV 文件进行写入,指定编码为 UTF-8
with open('test.csv', 'w', newline='', encoding='utf-8') as f:# 创建 CSV 写入器csv_writer = csv.writer(f)# 写入数据csv_writer.writerows(data)
1.3 读取操作
读取的时候,我们通过创建 CSV 读取器,来读取数据:
with open('test.csv', 'r', encoding='utf-8') as f:# 创建一个csv.reader对象,指定分隔符为逗号reader = csv.reader(f, delimiter=',')# 遍历reader对象,打印每一行数据for row in reader:print(row)# ['name', 'age', 'gender']
# ['张三', '18', '男']
# ['李四', '19', '女']
因为写入 CSV 文件的时候,通过文本打开,内容是通过,
进行分隔的,所以在创建CSV 读取器的时候,我们需要指定分隔符为delimiter
的值为,
通过遍历reader
可以获得数据,同时我们可以通过以下方式直接获取返回的结果
with open('test.csv', 'r', encoding='utf-8') as f:# 创建一个csv.reader对象,指定分隔符为逗号reader = csv.reader(f, delimiter=',')# 直接获取返回的结果print(list(reader))# [['name', 'age', 'gender'], ['张三', '18', '男'], ['李四', '19', '女']]
2 工具类封装
from typing import Union, List, Any
import csvclass CSVTools:def __init__(self, filename: str, delimiter: str = ',') -> None:self.filename = filenameself.delimiter = delimiterdef write(self, row: Union[List[Any], List[List[Any]]], mode: str = 'w') -> None:"""写入操作:param row: 数据:param mode: 模式,默认w:return:"""with open(self.filename, mode, newline='', encoding='utf-8') as file:csv_writer = csv.writer(file, delimiter=self.delimiter)if all(isinstance(sublist, list) for sublist in row):csv_writer.writerows(row)elif isinstance(row, list):csv_writer.writerow(row)else:raise TypeError("写入CSV文件的内容格式错误,写入失败")def read(self) -> List[List[Any]]:"""读取数据:return:"""with open(self.filename, 'r', encoding='utf-8') as f:reader = csv.reader(f, delimiter=self.delimiter)res = list(reader)return resif __name__ == '__main__':data = [['name', 'age', 'gender'],['张三', '18', '男'],['李四', '19', '女']]tool = CSVTools('test.csv')# tool.write(['name', 'age', 'gender'])# tool.write(['张三', '18', '男'])# tool.write(['李四', '19', '女'])tool.write(data)print(tool.read())
# [['name', 'age', 'gender'], ['张三', '18', '男'], ['李四', '19', '女']]
✏ 总结
在创建 CSV 写入器的时候,需要注意delimiter
是否修改了分隔符,默认使用的是,
,如果修改了分隔符,在创建读取器的时候,也需要使用相同的分隔符。