分享Python简短代码,实现TXT转换MySQL文件。
环境准备
我这里使用的是:
- python 3.10
- 第三方包和对应版本:
pandas==1.3.5
PyMySQL==1.0.2
SQLAlchemy==1.4.30
PySimpleGUI==4.56.0
方便项目环境管理,我一般使用pipenv创建管理虚拟环境,如果你也感兴趣,可以看下我之前写的pipenv基本使用教程。
pipenv install # 创建虚拟环境
pipenv shell # 进入虚拟环境
pip install pandas PyMySQL SQLAlchemy PySimpleGUI # 虚拟环境下安装需要的包
exit # 退出虚拟环境,直接关闭cmd也可
2.1 数据读取
查看示例数据发现有2种分隔符,空格和制表符\t,所以我们读取数据的时候也需要指定两种分隔符,另外这个文件没有表头,所以方便数据处理和存储,最好加上表头,和数据库字段名一致。
如下代码:
import pandas as pd
'''
read_csv参数解释:
1、要读取文件路径
2、sep 指定分隔符,读取数据,使用|可以添加多种分隔符
3、header=None 没有表头 默认第一行为表头
4、engine 设置程序引擎
'''
data = pd.read_csv('./resources/ctd2020-09-27.txt', sep=' |\t',header=None, engine='python')
data
不难看出,这样直接读取会有两列nan,这是因为还有两个空格分隔的,没关系,我们删除下整列都为nan的列即可,数据读取无误后,我们在添加上表头,实现代码如下:
# 读取文件
def get_txt_data(filepath):
columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']
data = pd.read_csv(filepath, sep=' |\t',header=None,engine='python')
# 删除数据全nan的列 (如果确实有这种列,后面可以再加上,不影响)
data.dropna(axis=1, how='all', inplace=True)
# 指定列名
data.columns = columns
return data
get_txt_data('./resources/ctd2020-09-27.txt')
2.2 数据处理
# 数据处理
def process_data(data):
# 不包含要处理的列,则直接简单去重后、存入数据库
data.drop_duplicates(inplace=True)
return data
2.3 数据存储
因为我们要将数据存储到mysql,所以存储之前,我们需要先连接上数据库,这里我使用的是sqlalchemy+pymysql链接mysql数据库,代码如下:
# 链接数据库
def link_mysql(user, password, database):
# create_engine("数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库",其他参数)
engine = create_engine(f'mysql+pymysql://{user}:{password}@localhost:3306/{database}?charset=utf8')
return engine
# 存储数据
def data_to_sql(data, user='root', password='Zjh!1997', database='sql_study', table='ctd'):
engine = link_mysql(user, password, database)
# 调用pandas 的 to_sql 存储数据
t1 = time.time() # 时间戳 单位秒
print('数据插入开始时间:{0}'.format(t1))
# 第一个参数:表名
# 第二个参数:数据库连接引擎
# 第三个参数:是否存储索引
# 第四个参数:如果表存在 就追加数据
data.to_sql(table, engine, index=False, if_exists='append')
t2 = time.time() # 时间戳 单位秒
print('数据插入结束时间:{0}'.format(t2))
print('成功插入数据%d条,'%len(data), '耗费时间:%.5f秒。'%(t2-t1))
汇总
# 文本文件存储到mysql
def txt_to_sql(filepath, user='root', password='Zjh!1997', database='sql_study', table='ctd'):
# 读取文件
data = get_txt_data(filepath)
# 数据处理
data = process_data(data)
# 数据存储
data_to_sql(data, user, password, database, table)
2.4 调用函数测试
filepath = './resources/ctd2020-09-27.txt'
# 只指定文件路径,其他参数使用默认值 方便测试
txt_to_sql(filepath)
然后还可以写个数据库读取函数进一步测试数据是否真的存储到了数据库中:
# 从数据库读取数据
def read_mysql(user='root', password='Zjh!1997', database='sql_study', table='ctd'):
engine = link_mysql(user, password, database)
# 读取的sql语句
sql = f'select * from {table} limit 3'
# 第一个参数:查询sql语句
# 第二个参数:engine,数据库连接引擎
pd_read_sql = pd.read_sql(sql, engine)
return pd_read_sql
调用函数,查看存储情况,没问题。
2.5 写一个GUI
这里我们使用的是PySimpleGUI包,如名字所言,真的很简单,其底层是Python自带的tkinter。
- 导入相关包
# 写个GUI
import PySimpleGUI as sg
# 调用数据存储函数
from txt_to_sql import txt_to_sql
- 编写GUI布局
# 设置GUI布局
# 相关参数 key:接收输入数据的key target:对应数据显示到指定的target
# default_text:设置输入框默认值
layout = [
[sg.Text('读取指定文件内容,处理后存入指定数据库表中~')],
[sg.FileBrowse('点击选取文件', key='filepath', target='file'), sg.Text(key='file')],
[sg.Text('登录用户名'), sg.InputText(key='user', default_text='root', )],
[sg.Text('登录密码'), sg.InputText(key='password', default_text='Zjh!1997')],
[sg.Text('数据库名称'), sg.InputText(key='database', default_text='sql_study')],
[sg.Text('存储的表名'), sg.InputText(key='table', default_text='ctd')],
[sg.Button('开始处理'), sg.Button('退出')]
]
- 创建程序窗口、业务逻辑
# 创建窗口程序
window = sg.Window('Txt To MySQL', layout, default_element_size=(100,))
while True:
event, values = window.read() # 获取数据
# print(event)
if event=='开始处理':
# 将输入数据传入数据处理程序
txt_to_sql(values['filepath'], values['user'], values['password'], values['database'], values['table'])
else:
# event in (None, '退出'): # 点击退出 关闭程序
break
window.close()
- 显示效果
在布局部分,layout为一个列表数据,列表内每个元素也为列表,表示一列,常使用的的布局模块有:Text(本文显示)、InputText(输入框)、Button(普通按钮)、FileBrowse(单个文件选择);
在创建窗口程序部分,主要是设置窗口默认大小default_element_size,设置宽度就行,高度会根据布局控件自适应,另外获取输入值也非常简单,直接read即可,返回的是字典,数据处理来更方便。
到这里,我们就完成所有程序的开发啦,后面是直接使用程序的方法。
三、方法
3.1 功能
- GUI界面,支持选择指定文件、输入数据库用户名 密码 数据库名称 表名。
- 读取指定文件,数据处理后,存入指定的数据库表中,如果表不存在就直接创建一个新表存储数据;否则直接添加数据到数据表中。
3.2 使用方法
解压后打开文件:python-Jonny,本文件内包含了所有python代码+测试数据+环境+windows bat运行文件,其他文件为@ 用Java写的txt to mysql方法和相关配置文件,
接续介绍如何使用python版本,首先我们需要解压我提供的python环境包,直接解压即可,无需二次安装。上面截图中相关文件解释:
├── Pipfile 虚拟环境配置文件(不用管)
├── Pipfile.lock 虚拟环境依赖包关系(不用管)
├── __pycache__ (不用管)
│ └── txt_to_sql.cpython-310.pyc (不用管)
├── python-Jonny-tJ_VXFMA.7z (虚拟环境压缩包,需要直接解压)
├── requirements.txt (本项目需要的第三Python包,都已经安装到给的虚拟环境了)
├── resources (测试数据)
│ └── ctd2020-09-27.txt
├── start.bat (windwos下可直接运行文件,启动项目)
├── txt_to_sql.py (Python代码文件,包含数据读取 处理 存储)
└── txt_to_sql_gui.py (Python代码文件,包含gui界面,在里面调用txt_to_sql.py文件,所以只用运行本文件即可)
虚拟环境解压好后,我们需要根据自己本地目录情况,修改下start.bat文件,内容如下:
@echo off
C:
cd C:\Users\Administrator\Desktop\python-Jonny
C:\Users\Administrator\Desktop\python-Jonny\python-Jonny-tJ_VXFMA\Scripts\python txt_to_sql_gui.py
exit
修改好后,直接点击start.bat即可运行项目,会弹出一个黑框(cmd),和一个gui程序界面,黑框里会显示程序执行输出的日志(就是程序里的print或者报错信息),gui里我们需要先点击按钮选择存储的文件,然后输入数据库相关信息,设置了默认值,然后点击开始处理按钮即可运行程序、存储数据,点击退出按钮关闭程序。
分享Python简短代码,实现TXT转换MySQL文件。相关推荐
- Python 简短代码:通过openpyxl将字典列表写入Excel
Python 简短代码将字典列表写入Excel python爬虫爬取的数据一般可以方便的储存为字典列表类型,即 [{},{},{}] 而将数据保存到本地时,为了使数据美观,可以写入到Excel表格 喜 ...
- python办公自动化实例(一):批量转换word文件为PDF
场景:有大批word文件需要转PDF,手动word转pdf速度很慢,尤其当word文件很大的时候,这时候就可以使用程序高效批量转换word文件了. 实现效果如下图所示 代码如下: #!user/bin ...
- python备份文件代码_python备份文件以及mysql数据库的脚本代码
#!/usr/local/python import os import time import string source=['/var/www/html/xxx1/','/var/www/html ...
- Python简短代码实现五子棋小游戏。。。
五子棋是是一种两人对弈的纯策略型棋类游戏. 玩法介绍: 玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜.玩法二:自己形成五子连线就替换对方任意一枚棋子.被替换的 ...
- pandas之数据文件导入和导出(python读取.csv,.txt,excel文件(.xlsx)以及导出为.csv、excel文件)
文件类型:.csv,.txt,.xlsx .csv文件,一行即为数据表的一行.生成数据表字段用逗号隔开(英文的逗号!!!!).csv文件用记事本和excel都能打开,用记事本打开显示逗号,用excel ...
- python截图代码讲解_Python为PPT文件进行截图操作的代码详解
下面的代码可以为powerpoint文件ppt进行截图,可以指定要截取的幻灯片页面,需要本机安装了powerpoint,可以指定截图的大小分辨率 import os import comtypes.c ...
- python 文本转excel_Python 文本(txt) 转换成 EXCEL(xls)
#!/bin/env python # -*- encoding: utf-8 -*- #------------------------------------------------------- ...
- python遍历目录将txt文档转换为Excel表格
最近因工作原因需要批量转换txt文档,手工一个个修改太耗时,于是写了个脚本,需要用的自己拿. 脚本流程基本分为3个部分. 1,遍历目录 2,找到目录下的txt文档 3,转换文档并在txt文档存储目录下 ...
- Spring Boot 实体类 Entity的自动生成,利用Python实现 sql 语句快速转换成 Java 代码(一)
引言 最近,自己开始学习Java后端开发,作为小白,在导师的指导下,一步步开始学习,从如何搭建springboot项目开始,连接上 MySQL 数据库之后,再创建和编写Entity.Controlle ...
最新文章
- 宇宙中至少有两种方式能灭绝人类,第一种仅需两秒
- svm理论与实验之11:svm开发工具包LibSVM
- k8s traefik ingress tls
- Scrapy框架的学习(12. scrapy中的模拟登陆,发送post请求模拟登陆)
- QT的QDtls类的使用
- python算法详解张玲玲电子版_算法之路该如何学习?
- webview js 与 java 调用参数问题。
- 配置Ubuntu虚拟环境
- 一个小白的转行Python的经历!
- 你要的六级成绩批量查询,它来啦......
- javascript内置属性
- 计蒜客:Adjoin the Networks
- 基因组测序中N50和N90到底指什么?
- Delphi2010设置成Delphi7风格
- 徐工汉云解析中小企业如何设备上云?
- IT售前咨询能力范围
- Z370技嘉主板通过U盘刷BIOS和恢复MAC地址的方法
- webinspect安全扫描
- thinkPhP6.0安装教程图解--PHP框架安装
- 醉逍遥显示无法更新服务器,《醉逍遥》新服今日开启 全新内容重磅呈现
热门文章
- 题目1022:游船出租 2007年浙江大学计算机及软件工程研究生机试真题
- 找实习的一些感悟(图像算法转大数据)——女孩也能干开发
- android bitmap转drawable
- uboot usb启动
- win xp32位系统安装mysql详细步骤
- vue中webpack5版本报错If you want to include a polyfill you need , If you don‘t want to include a polyfill
- python输出给定字符串中字母a出现的次数_[Python] 输出a字符串出现频率最高的字母,用到了list中的排序和Iambda...
- Facebook、微软、腾讯、DiDi message等全球科技公司都在抢先布局元宇宙
- 设置Ubuntu 20.04的静态IP地址
- Android学习文章推荐