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

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

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

1. CSV模块读写操作

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

读取CSV文件
import csv

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

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

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

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

def 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 _result
    except csv.Error as e:
        print('------------------------- read error')
        print(e)
        return []

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

import re

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

def store_data(data):
    _conn = None
    try:
        _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_data

if __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相关内容。

相关文章:

  • Centos8部署mongodb报错记录
  • 从星链到数字样机:直升机智能化升级的双引擎
  • 代码随想录算法营Day59 | 寻找存在的路径, 冗余连接,冗余连接II
  • 使用eNSP进行路由策略与引入实验
  • Manus AI : Agent 元年开启.pdf
  • OpenHarmony子系统开发 - AI框架开发指导
  • 机器学习常见面试题
  • 第TR3周:Pytorch复现Transformer
  • 深入解析 JVM —— 从基础概念到实战调优的全链路学习指南
  • Permute for Mac v3.12.1 文件格式转换器 支持M、Intel芯片
  • 多模态知识图谱融合
  • golang将大接口传递给小接口以及场景
  • _mm_load_si128和_mm_loadu_si128解析
  • 一个针对煤炭市场的人工智能项目的开发示例
  • 详细GD32F103的FreeRTOS移植含常见错误
  • 基于火山引擎的DeepSeek-V3 api实现简单的数据查询功能
  • Python爬虫实战:爬取财金网实时财经信息
  • 2、数据库的基础学习(中):分组查询、连接查询 有小例子
  • CV毕业宝典[02_目标检测概述]
  • 山东省网络安全技能大赛历年真题 山东网络安全创意大赛
  • 外贸网站建设排名/昆山seo网站优化软件
  • wap手机建站平台/推广营销平台
  • 哪个网站可有做投票搭建/seo新闻
  • 政府网站建设改版通知/网络推广岗位职责和任职要求
  • 中山手机网站建设/某网站搜索引擎优化
  • 石家庄专业建站公司/国内新闻大事