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

🍀 前言

博客地址:

  • 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', '女'])

通过文本编辑器打开文件,显示的内容为:
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 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是否修改了分隔符,默认使用的是,,如果修改了分隔符,在创建读取器的时候,也需要使用相同的分隔符。

💖 欢迎关注我的公众号

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Developer管理RESTful 服务

RESTful 服务依赖于ORDS(Oracle REST Data Services),所以在进行本实验前,请先确认数据库服务器上的ORDS服务已启动: $ systemctl status ords ● ords.service - Oracle REST Data ServicesLoaded: loaded (/etc/sys…

小程序canvas的同层渲染 这个属性不加,就不会生效!

做微信小程序的时候,发现vant-weapp的图表相关的vant再实机上怎么用都有问题(同层渲染失败)。 看了官方文档结果说了半天一点用都没有,官方原话是:当前所有原生组件(除 input 组件 focus 状态)均…

scripts/Makefile.host 分析【fixdep、conf】

文章目录 1. 目标 $(obj)/fixdep1.1 cmd_host-csingle函数分析: 2. 目标 $(obj)/conf2.1 cmd_host-cmulti函数分析:2.2 生成 $(obj)/conf.o 文件:2.3 生成 $(obj)/zconf.tab.o 文件: 1 # SPDX-License-Identifier: GPL-2.0 2 …

C++二级指针的指向与解引用

本文算是作者对于二级指针学习的一些总结或者说是刨根问底,如果有表述错误,还请各位大神指正。 我们首先定义一个整型a,令a 5,再分别定义指针p和二级指针ptr int a 5; int *p &a; int **ptr &p;我们不妨假设a的地址是…

云原生周刊:Gateway API v1.1 发布 | 2024.6.3

开源项目推荐 Grafana Tanka Tanka 是 Grafana 开发的一款用于 Kubernetes 的灵活、可重用和简洁的配置工具,是使用 YAML 进行 Kubernetes 配置的一种替代方案。 pv-migrate pv-migrate 是一个 CLI 工具/kubectl 插件,可以轻松地将一个 Kubernetes PersistentVo…

23中设计模式之一— — — —命令模式的详细介绍

命令模式 Command Pattern讲解 概念描述模式结构主要角色模式的UIM类图模式优点模式缺点应用场景实例演示类图代码演示运行结果 概念 命令模式(别名:动作,事务) 命令模式是一种行为设计模式,将一个请求封装为一个对象…

【qt】项目移植

项目移植 一.前言二.同名问题三.具体操作1.修改文件名2.修改类名3.修改一些不能自动改的名4.修改.ui文件5.删除原来自动生成的ui_xxx.h文件6.修改头文件 四.导入项目五.使用导入的项目六.项目建议 一.前言 终于概率论考完了,有时间了,接着上个项目,我们继续来完成我们的多窗口开…

【Leetcode Python】

偷某间房屋时,累积金额等于间隔前两间房的金额加上当前房的金额数;不偷时,累计金额就等于前一间房的金额数。 状态转移方程:dp[i] max(dp[i-2]nums[i], dp[i-1]) 并且注意错误点:dp[1]有两间房时,初始值为…

汽车soa架构介绍

SOA 架构的基本概念 面向服务的架构(Service-Oriented Architecture,简称 SOA)是一种软件设计和架构风格,近年来在软件开发领域得到了广泛的关注和应用。 SOA 的定义可以概括为:它是一种将应用程序分解为一组松散耦合的服务的架构模式。这些服务通过定义明确的接口进行通…

【Pycharm】功能介绍

1.Code Reformat Code 格式化代码,可以帮助我们去自动调整空格等,根据python语法规范自动调整 2.Settings 1.创建py文件默认填充模版 3.读写py文件编码格式一致性 顶部代码指定的编码方式作用: 可以保证python2/3解释器在读取文件的时候按…

jmeter并发测试

目录 常用的压测工具jmeter安装配置并执行新建测试计划 Test Plan添加线程组练习01:共10个线程,每秒钟启动一个线程(需要10秒),每个线程发送两个请求练习02:共10个线程,1秒中内启动完毕&#xf…

03-3.2.2 队列的顺序存储实现

👋 Hi, I’m Beast Cheng👀 I’m interested in photography, hiking, landscape…🌱 I’m currently learning python, javascript, kotlin…📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

kali中安装、卸载程序教程

1、安装教程 ①、使用apt安装 apt update (先更新apt) apt-get install xxxx(xxx为需要安装的软件名)②、使用dpkg安装 dpkg –i deb的软件包名(需要在软件包的目录下使用,不然就要把地址加上)二、卸载教程 ①、使…

hudi开启了流读,read.streaming.enabled为true,还需要设置查询类型吗 如snapshot

在使用 Apache Hudi 时,尤其是开启了流式读取(read.streaming.enabled 为 true),配置查询类型非常重要。查询类型决定了如何读取数据,尤其是在处理更新和删除操作时。 查询类型选项 在 Hudi 中,常见的查询…

ViewModel原理分析

认识 ViewModel ViewModel 是一种用来存储和管理UI相关数据的类。 ViewModel 的作用可以从两个方面去理解: UI界面控制器:在最初的MVC模式中,由于 Activity / Fragment 承担的职责过重,因此在后续的 MVP、MVVM 模式中&#xff…

基于JSP技术的人事管理系统

你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:浏览器(如360浏览器、谷歌浏览器、QQ浏览器等&#xff…

深度神经网络——什么是扩散模型?

1. 概述 在人工智能的浩瀚领域中,扩散模型正成为技术创新的先锋,它们彻底改变了我们处理复杂问题的方式,特别是在生成式人工智能方面。这些模型基于高斯过程、方差分析、微分方程和序列生成等坚实的数学理论构建。 业界巨头如Nvidia、Google…

【C语言】文件操作(下卷)

前言 在上一卷中,我们知道了文件指针、文件的打开和关闭(打开其他位置的文件)、文件的顺序读写(其中的fputc()、fgetc()),这一卷中,将继续讲解文件操作未讲到的地方。 内容有点多,…

人大金仓数据库报sys_user表字段不存在的问题

目录 一.问题: 二.原因 三.解决方法: 一.问题: 公司的一个项目从oracle切换到人大金仓之后,突然报了一个sys_user里面的字段不存在。 二.原因 检查了很多次确信sys_user表没问题,查了相应的文档之后发现原来人大金…

企业自建邮件系统的优势,安全性更高,功能更灵活,维护更便捷

在当今企业信息管理的浪潮中,企业邮件系统显得尤为关键,它不仅加强了内部的沟通效率,还对外展示了企业的专业形象。然而,传统租用企业邮箱服务存在一些不足,如缺乏灵活性、数据管理混乱和难以实现个性化需求&#xff0…