当前位置: 首页 > news >正文

第六课:数据存储三剑客:CSV/JSON/MySQL

在Python的数据存储与处理领域,CSVJSONMySQL被广大开发者誉为“数据存储三剑客”。它们各自在不同的场景下发挥着重要作用,无论是简单的数据交换、轻量级的数据存储,还是复杂的关系型数据库管理,都能找到它们的身影。本文将详细介绍如何使用Python的csv模块进行CSV文件的读写操作,json模块进行JSON数据的序列化处理,以及pymysql库连接MySQL数据库,并通过一个完整的案例展示如何构建一个数据管道。

1. CSV模块读写操作

CSV(Comma-Separated Values)文件是一种简单的文本文件格式,用于存储表格数据。Python的csv模块提供了丰富的功能,可以方便地进行CSV文件的读写操作。

读取CSV文件
import csvdef read_out():with open('my-checkin.csv', 'r') as _file:_reader = csv.reader(_file)for row in _reader:print(row)if __name__ == '__main__':read_out()

上述代码会打开名为data.csv的文件,并将其内容逐行读取为列表形式,然后打印出来。

写入CSV文件
import csv
import randomdef write_in():# 定义数据标题_list = [['date', 'in', 'out']]# 模拟一个月的考勤数据for i in range(31):_h = random.randint(1, 30) + 10_oh = random.randint(1, 30) + 20_list.append(['2025-03-' + (f'0{i}' if i < 10 else f'{i}'),'08:' + str(_h),'18:' + str(_oh)])# 打开csv文件,并写入数据with open('my-checkin.csv', 'w', newline='') as checkin:_writer = csv.writer(checkin)_writer.writerows(_list)if __name__ == '__main__':write_in()

上述代码会创建名为output.csv的文件,并将data列表中的数据逐行写入文件。

2. JSON数据序列化处理

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python的json模块提供了对JSON数据的解析和生成功能。

序列化(将Python对象转换为JSON字符串)
import jsondef to_json():# 定义字典数据data = {"name": "张三","age": 30,"is_employee": True,"skills": ["Python", "Java", "C++"]}# 将字典转换为JSON格式的字符串json_data = json.dumps(data, ensure_ascii=False, indent=4)print(json_data)if __name__ == '__main__':to_json()

上述代码会将Python字典data转换为格式化的JSON字符串,并打印出来。

反序列化(将JSON字符串转换为Python对象)
import jsondef to_obj():# 定义一个JSON格式的字符串json_data = '{"name": "李四", "age": 25, "is_employee": false, "skills": ["JavaScript", "HTML", "CSS"]}'# 将JSON字符串转换为Python字典data = json.loads(json_data)print(data)print(type(data))if __name__ == '__main__':to_obj()

上述代码会将JSON字符串json_data转换为Python字典data,并打印出来及其类型。

3. pymysql数据库连接

pymysql是Python中用于连接MySQL数据库的一个库,它提供了与MySQL数据库进行交互的接口。

安装pymysql

首先,你需要使用pip安装pymysql库:

pip install pymysql cryptography
连接MySQL数据库并执行查询
import pymysql# 建立与MySQL数据库的连接
conn = pymysql.connect(host='localhost',user='yourusername',password='yourpassword',database='yourdatabase'
)try:with conn.cursor() as cursor:# 执行SQL查询sql = "SELECT * FROM yourtable"cursor.execute(sql)# 获取查询结果results = cursor.fetchall()for row in results:print(row)
finally:# 关闭数据库连接conn.close()

上述代码会连接到本地的MySQL数据库,执行一个SQL查询,并打印查询结果。

4. 案例:构建完整数据管道

下面,我们将通过一个完整的案例,展示如何构建一个从CSV文件读取数据,经过处理(如数据清洗、转换等),然后存储到MySQL数据库中的数据管道。

数据管道流程
  • 从CSV文件读取数据。
  • 对数据进行清洗和转换。
  • 将处理后的数据存储到MySQL数据库中。
示例代码

原始数据(house_info.csv)

总价,单位价格,楼房信息
277,16380元/平米,2002年建/板塔结合
256,29869元/平米,2009年建/塔楼
500,30031元/平米,2005年建/板楼
215,13699元/平米,2000年建/塔楼
125,15117元/平米,2003年建/板楼
305,39173元/平米,2012年建/塔楼
98,11829元/平米,1992年建/平房
325,17580元/平米,2000年建/塔楼
290,24593元/平米,2015年建/板塔结合
232,26135元/平米,未知年建/板塔结合
153,17035元/平米,2013年建/板塔结合
225,26163元/平米,2011年建/塔楼
102,12848元/平米,未知年建/塔楼
126,12000元/平米,1998年建/板楼
167,18490元/平米,2013年建/塔楼
205,25764元/平米,2017年建/塔楼
240,19486元/平米,2008年建/板塔结合
155,20893元/平米,2012年建/板塔结合

从CSV文件读取数据(read_csv.py)

import csvdef read_csv(_filename):try:_result = []with open(_filename, 'r') as file:_reader = csv.reader(file)next(_reader)for line in _reader:_result.append(line)print('------------------------- read success')return _resultexcept csv.Error as e:print('------------------------- read error')print(e)return []

对数据进行清洗和转换(clean_data.py)

import redef is_num(_s):return re.match('^\d*\.?\d*$', _s)def clean_data(_list):_result = []try:# 原数据# ['279', '29531元/平米', '未知年建/板塔结合']# ['279', '29531元/平米', '2005年建/板塔结合']for _row in _list:_s2 = re.sub('[^0-9]', '', _row[1])_s3 = _row[2].split('/')_result.append([round(float(_row[0]) if is_num(_row[0]) else 0, 2),0 if '' else int(_s2),_s3[0],_s3[1],])except Exception as e:print('------------------------- clean error')print(e)print('------------------------- clean success')return _result

将处理后的数据存储到MySQL数据库中(store_data.py)

import pymysqldef store_data(data):_conn = Nonetry:_conn = pymysql.connect(host='localhost',user='python_demo',database='python_demo',password='kX#8+N4$@YQt@+EAOG&mj!*%jUvgtms&$')with _conn.cursor() as cursor:cursor.execute('''CREATE TABLE IF NOT EXISTS csv_demo_table (amount DECIMAL(10,2),price INT,build_year VARCHAR(40),house_type VARCHAR(40))''')# 插入数据sql = "INSERT INTO csv_demo_table (amount, price, build_year, house_type) VALUES (%s, %s, %s, %s)"cursor.executemany(sql, data)# 提交事务_conn.commit()except pymysql.Error as e:print('------------------------- mysql error')print(e)finally:if _conn:_conn.close()print('------------------------- store success')

执行整体业务数据(main.py)

from clean_data import clean_data
from read_csv import read_csv
from store_data import store_dataif __name__ == '__main__':# 调用读取方法获取csv数据_list = read_csv('house_info.csv')# 调用清洗方法获取结果集_result = clean_data(_list)# 存储数据到Mysql数据库中store_data(_result)print('------------------ finish')

说明

  • read_csv函数:从指定的CSV文件读取数据,并跳过表头行。
  • clean_data函数:对读取的数据进行清洗和转换,如将年龄字段转换为整数。
  • store_data函数:将处理后的数据存储到MySQL数据库中。首先检查表是否存在,如果不存在则创建表,然后插入数据并提交事务。
  • main函数:作为程序的入口,依次调用上述三个函数完成整个数据管道的流程。

通过以上步骤,我们成功构建了一个从CSV文件读取数据,经过处理,然后存储到MySQL数据库中的数据管道。这个案例展示了Python在数据处理和存储方面的强大能力。

关注我!!🫵 持续为你带来Nodejs相关内容。

相关文章:

第六课:数据存储三剑客:CSV/JSON/MySQL

在Python的数据存储与处理领域&#xff0c;CSV、JSON和MySQL被广大开发者誉为“数据存储三剑客”。它们各自在不同的场景下发挥着重要作用&#xff0c;无论是简单的数据交换、轻量级的数据存储&#xff0c;还是复杂的关系型数据库管理&#xff0c;都能找到它们的身影。本文将详…...

Qt常用控件之表格QTableWidget

表格QTableWidget QTableWidget 是一个表格控件&#xff0c;行和列交汇形成的每个单元格&#xff0c;是一个 QTableWidgetItem 对象。 1. QTableWidget属性 QTableWidget 的属性只有两个&#xff1a; 属性说明rowCount当前行的个数。columnCount当前列的个数。 2. QTableW…...

基于websocket的多用户网页五子棋 --- 测试报告

目录 功能测试自动化测试性能测试 功能测试 1.登录注册页面 2.游戏大厅页面 3.游戏房间页面 自动化测试 1.使用脑图编写web自动化测试用例 2.创建自动化项目&#xff0c;根据用例通过selenium来实现脚本 根据脑图进行测试用例的编写&#xff1a; 每个页面一个测试类&am…...

TypeError: Cannot assign to read only property ‘xxx‘ of object ‘#<Object>‘

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

SyntaxError: Unexpected token ‘xxx‘

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

简记_开关电源基础知识(二)

一、控制器与稳压器 假设开关损耗、导通损耗、驱动损耗的变化远小于输出功率的变化&#xff08;可忽略&#xff09;&#xff0c;则占空比越大&#xff0c;Po越大&#xff0c;效率越高。 二、同步与非同步 同步是采用通态电阻极低的MOSFET来取代整流二极管&#xff0c;以降低整…...

grum-与gam-词源故事

“grum”词根的含义主要与“咕隆、发哼声、咕咕叫、发隆隆声”等相关。在16世纪90年代后&#xff0c;这个词开始被用来表示发出低沉持续的咆哮声或隆隆声&#xff0c;类似于饥饿的胃或某些动物发出的声音。 早期的富贵家族经常雇佣人去干活&#xff0c;体力活很容易因为劳工过…...

联合索引关于In和范围查询影响索引使用的情况分析

索引类型 1、unique &#xff0c;唯一索引 2、normal&#xff0c;普通索引 3、fulltext, 全文索引 4、spatial&#xff0c;空间索引 样例 三个字段的联合索引&#xff0c;走一个字段是key_len是5&#xff0c;三个是15. 联合索引关于 使用in是不影响后续列 范围查询大于或小于…...

【目标检测】【NeuralPS 2023】Gold-YOLO:通过收集与分发机制实现的高效目标检测器

Gold-YOLO&#xff1a; Efficient Object Detector via Gather-and-Distribute Mechanism Gold-YOLO&#xff1a;通过收集与分发机制实现的高效目标检测器 0.论文摘要 在过去的几年中&#xff0c;YOLO系列模型已成为实时目标检测领域的领先方法。许多研究通过修改架构、增强数…...

2025上软考下周开启报名!附报考流程和常见问题解答

报名时间 &#xff1a;3月10日开始报名&#xff08;以当地报名时间为准&#xff09; 考试时间 &#xff1a;2025年5月24日~27日&#xff08;具体时间以准考证为准&#xff09; 报名网址 &#xff1a;中国计算机技术职业资格网(https://bm.ruankao.org.cn/sign/welcome) 目前已…...

PPT 小黑第16套

对应大猫19 在excel中复制表格 粘贴-选择性粘贴 -粘贴链接 业务部门和档案管理部门 剩下都是他们的下属级别 业务部门下面的选中按Tab 再选中Tab降级变成所属...

Swagger-01.介绍和使用方式

一.Swagger介绍 有了接口文档&#xff0c;我们就可以根据接口文档来开发后端的代码了。如果我们开发完了某个功能&#xff0c;后端如何验证我们开发的是否正确呢&#xff1f;我们就需要测试&#xff0c;使用Swagger就可以帮助后端生成接口文档&#xff0c;并且可以进行后端的接…...

从CL1看生物计算机的创新突破与发展前景:技术、应用与挑战的多维度剖析

一、引言 1.1 研究背景与意义 随着科技的飞速发展&#xff0c;计算机技术已经成为推动现代社会进步的核心力量之一。从最初的电子管计算机到如今的大规模集成电路计算机&#xff0c;计算机的性能得到了极大的提升&#xff0c;应用领域也不断拓展。然而&#xff0c;传统计算机…...

OpenCV视频解码性能优化十连击(实测帧率提升300%)

解密工业级视频处理优化方案&#xff01;从硬件加速到多线程榨干CPU/GPU性能&#xff0c;附RTSP流调优参数与内存泄漏排查技巧。 &#x1f527; 优化前准备 环境检测脚本 import cv2# 验证硬件加速支持 print("CUDA支持:", cv2.cuda.getCudaEnabledDeviceCount() &…...

springboot3 RestClient、HTTP 客户端区别

1 RestClient使用 RestClient 是 Spring 6.1 M2 中引入的同步 HTTP 客户端&#xff0c;它取代了 RestTemplate。同步 HTTP 客户端以阻塞方式发送和接收 HTTP 请求和响应&#xff0c;这意味着它会等待每个请求完成后才继续下一个请求。本文将带你了解 RestClient 的功能以及它与…...

智能手表不可插卡怎么用

一、连接蓝牙 智能手表一般都可以通过蓝牙连接手机&#xff0c;以实现一些基础功能。连接方式一般分为以下几步&#xff1a; 1、首先打开手机的蓝牙功能&#xff0c;并在蓝牙列表中搜索手表的设备名称。 2、找到手表的设备名称后&#xff0c;点击连接即可完成蓝牙连接。 3、…...

blender看不到导入的模型

参考&#xff1a;blender 快捷键 常见问题_blender材质预览快捷键-CSDN博客 方法一&#xff1a;视图-裁剪起点&#xff0c;设置一个很大的值 方法二&#xff1a;选中所有对象&#xff0c;对齐视图-视图对齐活动项-选择一个视图...

【Unity】 HTFramework框架(六十一)Project窗口文件夹锁定器

更新日期&#xff1a;2025年3月7日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 Project窗口文件夹锁定器框架文件夹锁定自定义文件夹锁定限制条件 Project窗口文件夹锁定器 在Project窗口中&#xff0c;文件夹锁定器能够为任何文件夹加…...

智能体开发:推理-行动(ReAct)思维链提示

人类在处理一个需要多个步骤才能完成任务时&#xff0c;显著特点是能够将言语推理&#xff08;内心独白&#xff09;和实际行动融合在一起&#xff0c;在面对陌生或不确定的情况时通过这种方法学习新知识&#xff0c;做出决策&#xff0c;并执行&#xff0c;从而应对复杂的任务…...

机试准备第11天

第一题是浮点数加法&#xff0c;目前写过最长的代码。 #include <stdio.h> #include <string> #include <iostream> #include <vector> using namespace std; int main() {string str1;string str2;while (getline(cin, str1) && getline(cin…...

【Proteus仿真】【STM32单片机】智能阳台控制系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用按键、LCD1604液晶、DHT11温湿度模块、PCF8591 ADC、光线传感器、PM2.5传感器、土壤湿度传感器、继电器、水泵、电灯、28BYJ48步进电机等。 主要…...

Manus AI Agent 技术解读:架构、机制与竞品对比

目录 1. Manus 是什么&#xff1f; 1.1 研发背景 1.2 技术特点 1.3 工具调用能力 1.4 主要应用场景 2. Manus 一夜爆火的原因何在&#xff1f; 2.1 技术突破带来的震撼 2.2 完整交付的产品体验 2.3 生态与开源策略 3. Manus 与其他 AI Agent 的对比分析 3.1 技术架构…...

【时间序列】因果推断:从时序数据中探寻“因”与“果”

在日常生活中&#xff0c;我们经常听到这样的问题&#xff1a;“为什么股票价格会突然下跌&#xff1f;”、“天气变化是否会影响销售额&#xff1f;”这些问题背后&#xff0c;其实都在试图寻找一种因果关系。然而&#xff0c;在时间序列数据中&#xff0c;探寻因果关系并不像…...

IDEA2023 使用枚举类型java: 非法字符: ‘\ufffd‘

一、异常&#xff1a; 二、原因 文件编码问题 IDE或文本编辑器的文件编码设置不正确&#xff0c;可能会导致在保存文件时引入了错误的字符。 三、解决 在IntelliJ IDEA中&#xff0c;你可以通过File -> Settings -> Editor -> File Encodings来设置。...

深度学习模型组件之优化器--基础优化器(GD、SGD、Mini-batch SGD)

深度学习模型组件之优化器–基础优化器&#xff08;GD、SGD、Mini-batch SGD&#xff09; 文章目录 深度学习模型组件之优化器--基础优化器&#xff08;GD、SGD、Mini-batch SGD&#xff09;1. 梯度下降&#xff08;Gradient Descent, GD&#xff09;1.1 基本原理1.2 优点与缺点…...

使用 AIStor、MLflow 和 KServe 将模型部署到 Kubernetes

在之前几篇关于 MLOps 工具的文章中&#xff0c;我展示了有多少流行的 MLOps 工具跟踪与模型训练实验相关的指标。我还展示了他们如何使用 MinIO 来存储作为模型训练管道一部分的非结构化数据。但是&#xff0c;一个好的 MLOps 工具应该做的不仅仅是管理您的实验、数据集和模型…...

宝塔 Linux 计划任务中添加运行项目网站PHP任务-定时任务

一、指定php版运行&#xff0c; cd /www/wwwroot/www.xxx.com/ && /www/server/php/56/bin/php think timedtasks start >> /tmp/timedtasks.log 2>&1 二、不指定php版 cd /www/wwwroot/www.xxx.com/ && php think timedtasks start >> …...

unity学习64,第3个小游戏:一个2D跑酷游戏

目录 学习参考 素材资源导入 1 创建项目 1.1 创建1个2D项目 1.2 导入素材 2 背景图bg 2.0 bg素材 2.1 创建背景 2.2 修改素材&#xff0c;且修改摄像机等 2.2.1 修改导入的原始prefab素材 2.2.2 对应调整摄像机 2.2.3 弄好背景 2.3 背景相关脚本实现 2.3.1 错误…...

rom定制系列------小米note3 原生安卓15 批量线刷 默认开启usb功能选项 插电自启等

小米Note 3搭载骁龙660处理器&#xff0c;1200万像素广角镜头、俗称大号版的小米6&#xff0c;官方最终版为12.0.1稳定版安卓9的固件。客户需要运行在安卓15的rom。根据原生官网的rom修改一些功能选项。以便客户操作需求。 定制资源说明 根据客户需求采用安卓15原生系统为底包…...

基于开源 AI 大模型、AI 智能名片及 S2B2C 商城小程序源码的个人 IP 用户运营策略研究

摘要&#xff1a;本文深入剖析了个人 IP 运营领域中用户运营的核心地位与关键作用&#xff0c;详细阐述了以拉新、留存和促活为主要方式的用户运营策略&#xff0c;旨在实现对用户的有效管理和用户价值的全面提升&#xff0c;进而延长用户生命周期&#xff0c;推动用户向消费者…...