一个py文件搞定mysql查询+Json转换+表数据提取+根据数据条件生成excel文件+打包运行一条龙
import os
import argparse
import pymssql
import json
import pandas as pd
from datetime import datetime
from pandas.io.formats.excel import ExcelFormatter
import openpyxl# 投注类型映射字典
BET_MAPPING = {1: 'WIN', 2: 'PLA', 3: 'QIN', 4: 'QPL',5: 'DBL', 6: 'TCE', 7: 'QTT', 8: 'D-Q',9: 'TBL', 10: 'T-T', 11: '6UP', 12: 'D-T',13: 'TRI', 14: 'FCT', 17: 'F-F'
}Meetingloc = {'ST':1, 'HV':2, 'S1':5, 'S2':6,'S3':7, 'S4':8, 'S5':9}def convert_pool_bitmap(pool_list):"""将数字列表转换为投注类型"""return [BET_MAPPING.get(num, f'未知({num})') for num in pool_list]def convert_meeting_loc(venue_list):"""将数字列表转换为 meeting 类型"""return Meetingloc.get(venue_list)def mains(date):# 数据库配置(需要根据实际情况修改)server = 'your server'user = 'your user'password = 'your pwd'database = 'your DB name'port = 'your port'# 准备数据容器output_data = []try:# 建立数据库连接conn = pymssql.connect(server=server,user=user,password=password,database=database,port=port)sql = """SELECT * FROM wc2wca_col_log WHERE msg_details LIKE %s AND msg_code = %s AND biz_date = %s AND msg_type = %sORDER BY msg_time desc"""# 定义查询参数for i in Meetingloc.keys():like_pattern = '%"meetingID":{"meetingLoc":' + str(Meetingloc.get(i)) + ',"meetingDayCode":[1-9]},"raceNo":1%'# like_pattern = '%"meetingID":{"meetingLoc":8,"meetingDayCode":[1-9]},"raceNo":1%'params = (like_pattern, # LIKE参数'1120', # msg_codedate, # biz_date'1' # msg_type)# 创建游标执行查询with conn.cursor(as_dict=True) as cursor:cursor.execute(sql,params)for row in cursor:try:# 解析JSON数据json_data = json.loads(row['msg_details'])# 提取目标字段race_no = json_data['Data']['raceNo']pool_bitmap = json_data['Data']['poolBitmap']msg_time = row['msg_time']# 转换投注类型converted_pool = convert_pool_bitmap(pool_bitmap)# 存储到数据集output_data.append({'meeting':i,'time': msg_time.strftime('%Y-%m-%d %H:%M:%S.%f'), # 格式化时间'interval': '','raceNo': race_no,'pool': ', '.join(converted_pool) # 列表转字符串})except (KeyError, json.JSONDecodeError) as e:print(f"数据处理异常: {str(e)}")continue# 数据处理: 将 S1 S2 S3 S4 S5 S6 ST HV 数据分组if output_data:groups = {}for item in output_data:meeting = item.get('meeting')if meeting in Meetingloc.key():if meeting not in groups:groups[meeting] = []groups[meeting].append(item)# 自定义输出路径output_dir = "./reports" # 自定义输出路径os.makedirs(output_dir, exist_ok=True)filename = f"RaceData_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx" # 生成文件名(带时间戳)filename = os.path.join(output_dir, filename)# 创建Excel文件with pd.ExcelWriter(filename, engine='openpyxl') as writer:for meeting_name, records in groups.items():df = pd.DataFrame(records, columns=['meeting','time','interval', 'raceNo', 'pool']) #指定顺序 df = df[['meeting','time','interval', 'RaceNo', 'Pool']]df["time"] = pd.to_datetime(df["time"]) # 转换为时间类型# df = df.sort_values(by="time").reset_index(drop=True)# 计算时间差(秒)df["Next_Time"] = df["time"].shift(-1)df["interval"] = (df["Next_Time"] - df["time"]).dt.total_seconds()df.drop("Next_Time", axis=1, inplace=True)# 处理最后一条记录的NaN值df["interval"] = df["interval"].fillna(0)df.to_excel(writer,sheet_name=meeting_name+str(date),index=False,startrow=0,startcol=0)# 获取工作表对象writer# worksheet = writer.sheets.get(meeting_name)worksheet = writer.sheets[meeting_name+str(date)]# 设置列宽(单位:字符)worksheet.column_dimensions['A'].width = 10 # MEETINGworksheet.column_dimensions['B'].width = 30 # 时间列worksheet.column_dimensions['C'].width = 10 # 间隔worksheet.column_dimensions['D'].width = 10 # RaceNo列worksheet.column_dimensions['E'].width = 60 # Pool类型列# 设置标题行样式header_style = {'font': {'bold': True, 'color': 'FFFFFF'},'fill': {'fill_type': 'solid', 'start_color': '4F81BD'},'alignment': {'horizontal': 'center'}}for cell in worksheet[1]: # 第一行为标题行cell.font = openpyxl.styles.Font(**header_style['font'])cell.fill = openpyxl.styles.PatternFill(**header_style['fill'])cell.alignment = openpyxl.styles.Alignment(**header_style['alignment'])# 自动调整行高for row in worksheet.iter_rows():for cell in row:worksheet.row_dimensions[cell.row].height = 20print(f"数据已成功导出到 {filename}")except pymssql.Error as e:print(f"数据库错误: {str(e)}")finally:if conn:conn.close()def process_date(date_str):"""处理日期参数的函数:param date_str: 必传参数(格式示例:20240325)"""# 验证参数格式(可选)if len(date_str) != 8 or not date_str.isdigit():raise ValueError("日期格式应为8位数字,例如:20240325")# 示例处理结果year = date_str[:4]month = date_str[4:6]day = date_str[6:]print(f"解析结果:{year}年{month}月{day}日")# 这里添加你的业务逻辑print(f"成功接收日期参数:{date_str}")print("正在处理...")# 这里添加你的业务逻辑mains(date_str)def main(): # [!] 关键点:确保这里没有参数# 创建命令行参数解析器parser = argparse.ArgumentParser(description='日期处理程序')parser.add_argument('date',type=str,help='必传的日期参数(8位数字,示例:20240325)')args = parser.parse_args()process_date(args.date)if __name__ == "__main__":process_date('20240328')
最后运行:
一、cmd直接运行脚本测试:
python date_app.py 20240325
二、打包:打包问题:‘“indexerror: tuple index out of range” 可以参考连接 , 一般问题可以参考连接
pyinstaller --onefile date_app.py
三、生成dist文件后,会生成exe文件
在dist文件夹里面新建reports文件夹:报告文件夹
四、测试打包后的程序
1、新建start.bat空文件
2、放入代码:
start PMUCOL_LOG.exe 20240328
3、运行start.bat
五、生成报告:.\reports\xxxx.xlsx
备注:至于生成Excel文件的代码,想看数据格式的。可以参考
相关文章:
一个py文件搞定mysql查询+Json转换+表数据提取+根据数据条件生成excel文件+打包运行一条龙
import os import argparse import pymssql import json import pandas as pd from datetime import datetime from pandas.io.formats.excel import ExcelFormatter import openpyxl# 投注类型映射字典 BET_MAPPING {1: WIN, 2: PLA, 3: QIN, 4: QPL,5: DBL, 6: TCE, 7: QTT,…...
微服务学习(1):RabbitMQ的安装与简单应用
目录 RabbitMQ是什么 为什么要使用RabbitMQ RabbitMQ的安装 RabbitMQ架构及其对应概念 队列的主要作用 交换机的主要作用 RabbitMQ的应用 通过控制面板操作(实现收发消息) RabbitMQ是什么 RabbitMQ是一个开源的消息队列软件(消息代理…...
【RAG】Embeding 和 Rerank学习笔记
Q: 现在主流Embeding模型架构 在RAG(Retrieval-Augmented Generation)系统中,嵌入模型(Embedding Model) 是检索阶段的核心组件,负责将查询(Query)和文档(Document&#…...
【Delphi】如何解决使用webView2时主界面置顶,而导致网页选择文件对话框被覆盖问题
一、问题描述: 在Delphi 中使用WebView2控件,如果预先把主界面置顶(Self.FormStyle : fsStayOnTop;),此时,如果在Web页面中有使用(<input type"file" id"fileInput" acc…...
【量化金融自学笔记】--开篇.基本术语及学习路径建议
在当今这个信息爆炸的时代,金融领域正经历着一场前所未有的变革。传统的金融分析方法逐渐被更加科学、精准的量化技术所取代。量化金融,这个曾经高不可攀的领域,如今正逐渐走进大众的视野。它将数学、统计学、计算机科学与金融学深度融合&…...
iOS 使用消息转发机制实现多代理功能
在iOS开发中,我们有时候会用到多代理功能,比如我们列表的埋点事件,需要我们在列表的某个特定的时机进行埋点上报,我们当然可以用最常见的做法,就是设置代理实现代理方法,然后在对应的代理方法里面进行上报&…...
16.3 LangChain Runnable 协议精要:构建高效大模型应用的核心基石
LangChain Runnable 协议精要:构建高效大模型应用的核心基石 关键词:LCEL Runnable 协议、LangChain 链式开发、自定义组件集成、流式处理优化、生产级应用设计 1. Runnable 协议设计哲学与核心接口 1.1 协议定义与类结构 #mermaid-svg-PlmvpSDrEUrUGv2p {font-family:&quo…...
Starrocks入门(二)
1、背景:考虑到Starrocks入门这篇文章,安装的是3.0.1版本的SR,参考:Starrocks入门-CSDN博客 但是官网的文档,没有对应3.0.x版本的资料,却有3.2或者3.3或者3.4或者3.1或者2.5版本的资料,不要用较…...
【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
Electron一小时快速上手
1. 什么是 Electron? Electron 是一个跨平台桌面应用开发框架,开发者可以使用 HTML、CSS、JavaScript 等 Web 技术来构建桌面应用程序。它的本质是结合了 Chromium 和 Node.js,现在广泛用于桌面应用程序开发。例如,以下桌面应用都使用了 El…...
算法004——盛最多水的容器
力扣——盛最多水的容器点击即可跳转 当我们选择1号线和8号线时,下标为 1 和 8 形成容器的容积的高度是由 较矮的决定的,即下标为 8 的位置; 而宽度则是 1到8 之间的距离,为 8-17,此时容器的容积为 7 * 7 49。 当我…...
Java Web-Filter
Filter 在 Java Web 开发中,Filter(过滤器)是 Servlet 规范中的一个重要组件,它可以对客户端与服务器之间的请求和响应进行预处理和后处理。以下从多个方面详细介绍 Java Web 中的 Filter: 一、概念和作用 概念&…...
LeetCode 热题100 438. 找到字符串中所有字母异位词
LeetCode 热题100 | 438. 找到字符串中所有字母异位词 大家好,今天我们来解决一道经典的算法题——找到字符串中所有字母异位词。这道题在 LeetCode 上被标记为中等难度,要求我们在字符串 s 中找到所有是 p 的异位词的子串,并返回这些子串的…...
DeepSeek-R1训练时采用的GRPO算法数学原理及算法过程浅析
先来简单看下PPO和GRPO的区别: PPO:通过奖励和一个“评判者”模型(critic 模型)评估每个行为的“好坏”(价值),然后小步调整策略,确保改进稳定。 GRPO:通过让模型自己生…...
Qt基于信号量QSemaphore实现的生产者消费者模型
在 Qt 中,信号量(QSemaphore)是一种用于控制对共享资源访问的同步工具。它允许一定数量的线程同时访问共享资源,适合用于生产者-消费者模型。 代码实现 #include <QCoreApplication> #include <QThread> #include &…...
七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)
七星棋牌源码 是一款运营级的棋牌产品,覆盖 湖南、湖北、山西、江苏、贵州 等 6 大省区,支持 安卓、iOS 双端,并且 全开源。这个版本是 修复优化后的二开版本,新增了 乐豆系统、比赛场模式、防沉迷机制、AI 智能控制 等功能&#…...
CSDN博客导出设置介绍
在CSDN编辑博客时,如果想导出保存到本地,可以选择导出为Markdown或者HTML格式。其中导出为HTML时有这几种选项:jekyll site,plain html,plain text,styled html,styled html with toc。分别是什…...
_ 为什么在python中可以当变量名
在 Python 中,_(下划线)是一个有效的变量名,这主要源于 Python 的命名规则和一些特殊的使用场景。以下是为什么 _ 可以作为变量名的原因和常见用途: --- ### 1. **Python 的命名规则** Python 允许使用字母ÿ…...
使用haproxy实现MySQL服务器负载均衡
一、环境准备 主机名IP地址备注openEuler-1192.168.121.11mysql-server-1openEuler-2192.168.121.12mysql-server-2openEuler-3192.168.121.13clientRocky-1192.168.121.51haproxy 二、mysql-server配置 [rootopenEuler-1 ~]# yum install -y mariadb-server [rootopenEuler…...
音视频-WAV格式
1. WAV格式说明: 2. 格式说明: chunkId:通常是 “RIFF” 四个字节,用于标识文件类型。(wav文件格式表示)chunkSize:表示整个文件除了chunkId和chunkSize这 8 个字节外的其余部分的大小。Forma…...
apload-lab打靶场
1.提示显示所以关闭js 上传<?php phpinfo(); ?>的png形式 抓包,将png改为php 然后放包上传成功 2.提示说检查数据类型 抓包 将数据类型改成 image/jpeg 上传成功 3.提示 可以用phtml,php5,php3 4.先上传.htaccess文件࿰…...
通用查询类接口数据更新的另类实现
文章目录 一、简要概述二、java工程实现1. 定义main方法2. 测试运行3. 源码放送 一、简要概述 我们在通用查询类接口开发的另类思路中,关于接口数据的更新,提出了两种方案: 文件监听 #mermaid-svg-oJQjD6jQ8T19XlHA {font-family:"tre…...
sentinel详细使用教学
sentinel源码地址: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D sentinel官方文档: https://sentinelguard.io/zh-cn/docs/introduction.html Sprong Cloud alibaba Sentinel文档【小例子】 : https://github.com/alibaba/spring-cl…...
python django
官网地址 https://www.djangoproject.com/ 安装 控制台输入命令 pip install django 或者可以指定版本号 pip install django3.2.4 创建项目 在控制台找个目录存放生成好的项目,输入命令 django-admin startproject demo_django 然后用pycharm打开项目可以…...
SuperMap iClient3D for WebGL 影像数据可视范围控制
在共享同一影像底图的服务场景中,如何基于用户权限体系实现差异化的数据可视范围控制?SuperMap iClient3D for WebGL提供了自定义区域影像裁剪的方法。让我们一起看看吧! 一、数据制作 对于上述视频中的地图制作,此处不做讲述&am…...
HTML元素,标签到底指的哪块部分?单双标签何时使用?
1. 标签(Tag) vs 元素(Element) 标签(Tag) 标签是 HTML 中用于定义元素的符号,用尖括号 < > 包裹。例如 <img> 是标签。元素(Element) 元素是由 标签 内容…...
OpenHarmony4.1-轻量与小型系统ubuntu开发环境
因OpenHarmony官网提供包含轻量、小型与标准系统的全量代码非常宠大,解包后大概需要70G以上硬盘空间,如要编译标准系统则需要140G以上空间。 如硬盘空间有限与只使用轻量/小型OpenHarmony系统,则可以下载并直接使用本人裁剪源码过的ubuntu硬盘…...
秒杀系统的常用架构是什么?怎么设计?
架构 秒杀系统需要单独部署,如果说放在订单服务里面,秒杀的系统压力太大了就会影响正常的用户下单。 常用架构: Redis 数据倾斜问题 第一步扣减库存时 假设现在有 10 个商品需要秒杀,正常情况下,这 10 个商品应该均…...
LabVIEW中三种PSD分析VI的区别与应用
在LabVIEW的声音与振动分析工具包中,SVFA Power Spectral Density VI、SVFA Power Spectral Density Subset VI 和 SVFA Zoom Power Spectral Density VI 均用于信号频域分析,但它们在功能、适用场景和操作逻辑上存在显著差异。以下从区别、应用场合、注…...
Python 如何实现 Markdown 记账记录转 Excel 存储
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
