Python-批量日期数据格式化处理

news2024/11/19 10:16:59

日期格式化处理小程序

背景

用于批量格式化数据,背景就是领导给我我一张下面这样的表格,其中启用日期是五花八门的格式,大概有几万行,需要把启用日期一列统一格式化为“YYYY-MM-DD”的格式,显然,针对这种格式不统一的数据,用Excel处理很费劲。

生产厂家启用日期
赛默飞2021.12.28
赛默飞20190515
赛默飞2013/3/30
赛默飞2011-3
安捷伦2012.8.10
安捷伦2015.02.09
安捷伦2020/10/1
安捷伦20200708

初步解决方案

让AI处理,结果AI处理了几百行后告诉我太多了,它不干了,我再问就直接丢给我一段Python代码,果断引入依赖,稍微调了调,勉强能够完成工作。

import pandas as pd
from datetime import datetime

# 读取Excel文件
input_file = 'C:\\Users\\Aerle\\Desktop\\日期数据.xlsx'  # 假设您的Excel文件名是input.xlsx
output_file = 'C:\\Users\\Aerle\\Desktop\\格式化后的结果.xlsx'  # 转换后的数据将保存到这个文件中
df = pd.read_excel(input_file, header=None)  # 假设数据在第一个工作表,且没有列标题

# 定义一个函数来解析和格式化日期
def format_date(date_str):
    # 尝试多种可能的日期格式来解析字符串
    formats = ['%Y%m%d', '%Y.%m.%d', '%Y/%m/%d', '%Y-%m', '%Y/%m/%d','%Y.%m','%Y-%m-%d']
    for fmt in formats:
        try:
            # 解析日期字符串
            date = datetime.strptime(date_str, fmt)
            # 格式化为YYYY-MM-dd
            return date.strftime('%Y-%m-%d')
        except ValueError:
            pass  # 如果当前格式不匹配,则尝试下一个格式
    return None  # 如果所有格式都不匹配,则返回None

# 应用函数到数据列的每一个元素
df[0] = df[0].apply(format_date)

# 将结果输出到一个新的Excel工作表中
df.to_excel(output_file, index=False, header=False)  # 不包含索引和列标题

实现GUI操作

但是很明显,文件名跟输出路径都需要在代码中修改,很不友好,决定给这段代码加上简单的GUI,通过不断的调试,最终完成如下代码,以下代码可以直接运行:

import os
import subprocess
import tkinter as tk
from tkinter import filedialog
import pandas as pd
from datetime import datetime

def select_input_file(root,input_file_path_var):
    input_file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx;*.xls")])
    if input_file_path:
        input_file_path_var.delete(0, tk.END)
        input_file_path_var.insert(0, input_file_path)
        return input_file_path

def select_output_file(root,output_file_path_var):
    output_file_path = filedialog.asksaveasfilename(defaultextension=".xlsx")
    if output_file_path:
        output_file_path_var.delete(0,tk.END)
        output_file_path_var.insert(0, output_file_path)
        return output_file_path

# 定义一个函数来解析和格式化日期
def format_date(date_str):
    # 尝试多种可能的日期格式来解析字符串
    formats = ['%Y%m%d', '%Y.%m.%d', '%Y/%m/%d', '%Y-%m', '%Y/%m/%d','%Y.%m','%Y-%m-%d']
    for fmt in formats:
        try:
            # 解析日期字符串
            date = datetime.strptime(date_str, fmt)
            # 格式化为YYYY-MM-dd
            return date.strftime('%Y-%m-%d')
        except ValueError:
            pass  # 如果当前格式不匹配,则尝试下一个格式
    return None  # 如果所有格式都不匹配,则返回None

# 定义要执行的主要脚本
def do_format(root, input_file_path_var,output_file_path_var):
    inputfile = input_file_path_var.get()
    outputfile = output_file_path_var.get()
    df = pd.read_excel(inputfile, header=None)  # 假设数据在第一个工作表,且没有列标题
    # 应用函数到数据列的每一个元素
    df[0] = df[0].apply(format_date)
    # 将结果输出到一个新的Excel工作表中
    df.to_excel(outputfile, index=False, header=False)  # 不包含索引和列标题
    root.destroy()
# 创建主函数
def main():
    # 创建主窗口
    root = tk.Tk()
    root.title("日期格式化小工具")
    # 创建一个Tkinter变量来存储文件路径
    input_file_path_var = tk.StringVar()
    output_file_path_var = tk.StringVar()
    # 输入文件框
    input_frame = tk.Frame(root)
    input_frame.pack(pady=10)
    input_label = tk.Label(input_frame, text="输入文件:")
    input_label.pack(side=tk.LEFT)
    input_file_path_var = tk.Entry(input_frame, width=50)
    input_file_path_var.pack(side=tk.LEFT)
    input_button = tk.Button(input_frame, text="选择文件", command=lambda:select_input_file(root,input_file_path_var))
    input_button.pack(side=tk.LEFT)
    # 输出文件框
    output_frame = tk.Frame(root)
    output_frame.pack(pady=10)
    output_label = tk.Label(output_frame, text="输出文件:")
    output_label.pack(side=tk.LEFT)
    output_file_path_var = tk.Entry(output_frame, width=50)
    output_file_path_var.pack(side=tk.LEFT)
    output_button = tk.Button(output_frame, text="选择路径", command=lambda:select_output_file(root,output_file_path_var))
    output_button.pack(side=tk.LEFT)
    # 创建按钮用于执行脚本
    execute_button = tk.Button(root, text="执行脚本", command=lambda:do_format(root, input_file_path_var,output_file_path_var))
    execute_button.pack(pady=5)
    # 运行Tkinter事件循环
    root.mainloop()
if __name__ == "__main__":
    main()

Pyinstaller打包

对上面完成的脚本进行打包成EXE可执行文件给同事们用,使用pytinstaller进行,只需要一行代码:

PS D:\VSCode-workspace\Python> cd .\Usefull_Utils\
PS D:\VSCode-workspace\Python\Usefull_Utils> pip3.12 install --upgrade pyinstaller
PS D:\VSCode-workspace\Python\Usefull_Utils> pyinstaller .\dateFormatter2.0.py

项目地址

https://gitcode.com/weixin_44803446/UsefulPythonUtils/overview

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

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

相关文章

GPT-4搞不定的图推理,港科大7B模型搞定

大模型执行图推理任务,我们是希望大模型仅仅给出结果,还是在给出准确答案的同时,输出详细的推理过程? 先来看GPT-4的表现: 给出了一个非常简短且错误的答案(判断该图中没有环),这可…

【扩散模型(二)】IP-Adapter 从条件分支的视角,快速理解相关的可控生成研究

系列文章目录 【扩散模型(一)】中介绍了 Stable Diffusion 可以被理解为重建分支(reconstruction branch)和条件分支(condition branch)本文将从该视角快速理解 IP-Adapter 以及相关可控生成研究。 文章目…

linux下OpenSSL升级到1.1以上版本

要将CentOS 7上的OpenSSL升级到1.1以上版本,您需要遵循以下步骤。请注意,这些步骤可能需要一些系统管理经验,因为您将从源代码编译和安装OpenSSL。 1. 更新系统软件包 首先,确保您的系统软件包是最新的。使用以下命令更新所有软…

智慧校园-毕业管理系统总体概述

在当今教育信息化的浪潮中,智慧校园毕业管理系统脱颖而出,它作为一项综合性的数字平台,全面覆盖了从毕业资格审查到学位授予的每一个关键步骤,旨在通过智能化手段,为高校的毕业管理工作带来革命性的变革。毕业管理系统…

下一代广域网技术2:SRv6

2.SRv6 SR架构设计之初,就为SR数据平面设计了两种实现方式:一种是SR-MPLS,其重用了MPLS数据平面,可以在现有IP/MPLS网络上增量部署;另一种是SRv6,使用IPv6数据平面,基于IPv6路由扩展头进行扩展…

第七届IAIC(成都)国际医美产业大会在蓉召开

四川省人民医院新丽美获“中国整形美容协会医疗救助与修复基金-成都市整形修复定点医院”“‘放心美 医无忧’全过程保障示范医院”两块授牌 2024年6月24日,第七届IAIC(成都)国际医美产业大会暨“医美之都”高峰会议省医院新丽美整形修复基地…

CesiumJS加载天地图数据后,可以实现什么效果?

说起地图,大家耳熟能详的百度地图、高德地图、腾讯地图等,由于授权的原因,使用起来心惊胆战的,而天地图就没有这方面的困扰,本文介绍下如何在cesium中时候用天地图数据,已经能够实现哪些交互效果。 一、关…

无限制数字(仅仅int类型)的大小的自然排序算法

直接上代码&#xff1a; #include <iostream> #include <vector> #include <string> #include <algorithm> #include <cctype>// Function to compare two strings in a natural way bool naturalCompare(const std::string& a, const std:…

录制视频怎么操作?手把手教会你!

在这个互联网科技高速发展的时代&#xff0c;录制视频已经成为了人们生活中一个不可或缺的技能。无论是记录游戏精彩瞬间、制作教程、分享生活趣事&#xff0c;还是进行在线教学&#xff0c;录制视频都是一种非常直观有效的方式。可是录制视频怎么操作呢&#xff1f;本文将介绍…

Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南

系列文章目录 Vue核心指令解析&#xff1a;探索MVVM与数据操作之美 文章目录 系列文章目录前言一、Vue生命周期是什么&#xff1f;二、钩子函数讲解1. beforeCreate( 创建前 )2. created ( 创建后 &#xff09;3. beforeMount&#xff08;挂载前&#xff09;4. mounted&#xf…

第11章 规划过程组(制订项目管理计划)

第11章 规划过程组&#xff08;一&#xff09;11.1制订项目管理计划&#xff0c;在第三本版教材第368~372页&#xff1b; 文字图片音频方式 视频16 第一个知识点&#xff1a;主要输入 1、事业环境因素 政府或行业标准(如产品标准、质量标准、安全标准和工艺标准) 法律法规要求…

乐乐趣《牛津话科学 侃侃闪闪的科学大冒险》新书分享会圆满落幕

2024年6月21日&#xff0c;乐乐趣《牛津话科学 侃侃闪闪的科学大冒险》新书分享会在BIBF绘本展活动区举行。牛津大学出版社中国区首席内容官孙赫男、北京师范大学教育学部副教授张进宝、中国美协漫画艺术委员会秘书长王立军、荣信文化副总经理兼乐乐趣总编辑孙肇志围绕孩子的科…

【Python机器学习】聚类算法的对比与评估——在人脸数据集上比较算法

数据探查&#xff1a; 我们将k均值、DBSCAN和凝聚聚类算法应用于Wild数据集中的Labeled Faces&#xff0c;并查看它们是否找到了有趣的结构。我们将使用数据的特征脸表示&#xff0c;它由包含100个成分的PCA(whitenTrue)生成&#xff1a; peoplefetch_lfw_people(data_home &…

ChatGPT API技术教程OpenAI APIKey在线对接-Chat Completion对象

表示模型根据提供的输入返回的聊天完成响应。 {"id": "chatcmpl-123","object": "chat.completion","created": 1677652288,"model": "gpt-3.5-turbo-0125","system_fingerprint": "fp…

锂价跌至近3年最低,大型能源公司已出手抄底,巴菲特也在参与

长远来看&#xff0c;随着电动化进程的深入推进&#xff0c;锂的战略地位依然不可替代。但短期内&#xff0c;供需失衡和价格波动可能会持续&#xff0c;行业参与者需要调整策略以应对当前的挑战。 锂业&#xff0c;正经历自2021年以来最为严峻的调整期。作为电动汽车电池的关…

SpringBoot学习03-[Spring Boot与Web开发]

Spring Boot与Web开发 RestTemplateMockMvc在SPringBoot中使用 SpringBoot整合swagger2SpringBoot的springmvc自动配置底层原理包含ContentNegotiatingViewResolver和BeanNameViewResolverContentNegotiatingViewResolverBeanNameViewResolver 支持提供静态资源&#xff0c;包括…

Inner Transitions

Inner Transitions 内部转换是指不退出源状态的转换。当为具有异或分解的超状态定义时&#xff0c;内部转换是强大的。 使用内部转换可以极大地简化Stateflow图表&#xff0c;如以下示例所示&#xff1a; 使用内部转换之前 使用内部转换到连接结点之后 使用内部转换到历史节点…

【线上】如何解决积压消费?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!​​​​​​​ Hello, 各位亲爱的读者朋友们!我是你们的小米,一个积极活泼的技术分享达人,今天我们要聊聊一个大家在分布式系统中经常遇到的棘手问题…

Maven私服批量上传pom和jar实操

Maven私服上传pom和jar实操-CSDN博客 Maven私服上传jar实操_maven fakepath-CSDN博客 之前写过两篇向maven私服上传jar的操作&#xff0c;看到阅读量还可以&#xff0c;觉得应该有很多人有这个需求&#xff0c;所以这次再放一个大招&#xff0c;通过批量的方式向私服传jar和p…

STM32F4 STD标准库串口接收例程

STM32F4 STD标准库串口接收中断空闲中断例程 &#x1f516;工程基于STM32F446 ✨用惯了STM32CubeMX傻瓜式配置&#xff0c;突然改用标准库写代码&#xff0c;初始化外设内容&#xff0c;总是丢三落四的。 本文将提供3种串口接收和发送模式&#xff1a;串口接收中断空闲中断、串…