探索 CSV 模块:Python 中 CSV 数据持久化的最佳实践

🍀 前言

博客地址:

👋 简介

本章节介绍使用 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', '女'])

通过文本编辑器打开文件,显示的内容为:
image.png
使用excel打开文件,显示的内容为:
image.png

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 csv


class CSVTools:
    def __init__(self, filename: str, delimiter: str = ',') -> None:
        self.filename = filename
        self.delimiter = delimiter

    def 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 res

if __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是否修改了分隔符,默认使用的是,,如果修改了分隔符,在创建读取器的时候,也需要使用相同的分隔符。

💖 欢迎关注我的公众号

在这里插入图片描述

  • 47
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值