修改文档日期神器 - Python打造日期修改器

 这篇文章将介绍一款使用 Python 开发的实用工具 - 日期修改器。它可以帮助您轻松修改 Word (.docx) 和 PDF 文档的日期信息,满足日常办公和文档整理的需求。

C:\pythoncode\new\modifyfiledate.py

软件功能

  • 支持修改 Word (.docx)  日期信息。
  • 允许选择要修改的日期类型,包含“修改日期”和“创建日期”。
  • 提供清晰的界面,方便用户选择文件、日期类型和输入目标日期。
  • 程序会校验输入的日期格式,确保修改的准确性。
  • 操作完成后,软件会弹出消息提示框,告知修改成功与否。

技术实现

日期修改器使用 Python 语言开发,并使用了以下第三方库:

  •  wxPython: 用于创建用户界面 (GUI)。
  • docx: 文档: 用于操作 Word (.docx) 文档。

程序通过 wxPython 创建了一个简洁易用的界面,用户可以在其中选择需要修改的文档、日期类型以及输入目标日期。接下来,程序会根据文件格式调用不同的处理函数,分别使用 docx 库来修改相应的日期属性。

软件使用

  1. 下载并运行日期修改器程序 (需确保已安装 Python 及相关库)。
  2. 点击“文件选择”按钮,选择要修改日期的 Word  文档。
  3. 从下拉框中选择要修改的日期类型 (“修改日期” 或 “创建日期”)。
  4. 在文本框中输入您想要修改成的目标日期,格式为 “yyyy-mm-dd”。
  5. 点击“修改”按钮,程序将尝试修改文档日期。
  6. 修改完成后,程序会弹出消息提示框,告知修改成功与否。

注意: 修改后的文档将覆盖原文件,请确保您拥有文件的备份。

拓展:

  • 可以考虑添加功能让用户设置是否覆盖原文件。
  • 也可以加入批量修改的功能,提高效率。

全部代码:

import wx
import os
import datetime
from docx import Document
from PyPDF2 import PdfFileReader, PdfFileWriter

class DateModifierApp(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Date Modifier')
        self.SetSize(400, 300)
        self.InitUI()

    def InitUI(self):
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        # 文件选择
        file_picker = wx.FilePickerCtrl(panel, name='FilePicker')  # 设置名称为 'FilePicker'
        vbox.Add(file_picker, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 10)



        # 日期类型选择
        date_type_choices = ['修改日期', '创建日期']
        self.date_type_choice = wx.Choice(panel, choices=date_type_choices)
        vbox.Add(self.date_type_choice, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 10)

        # 目标日期输入
        date_input = wx.BoxSizer(wx.HORIZONTAL)
        date_label = wx.StaticText(panel, label='目标日期:')
        date_input.Add(date_label, 0, wx.RIGHT, 10)
        self.date_input_ctrl = wx.TextCtrl(panel)
        date_input.Add(self.date_input_ctrl, 1, wx.EXPAND)
        vbox.Add(date_input, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 10)

        # 修改按钮
        modify_btn = wx.Button(panel, label='修改')
        modify_btn.Bind(wx.EVT_BUTTON, self.ModifyDate)
        vbox.Add(modify_btn, 0, wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, 10)

        panel.SetSizer(vbox)

      

    def ModifyDate(self, event):
        file_path = self.FindWindowByName('FilePicker').GetPath()
        date_type = self.date_type_choice.GetStringSelection()
        target_date_str = self.date_input_ctrl.GetValue()

        try:
            target_date = datetime.datetime.strptime(target_date_str, '%Y-%m-%d')
        except ValueError:
            wx.MessageBox('请输入正确的日期格式 (yyyy-mm-dd)', '错误', wx.OK | wx.ICON_ERROR)
            return

        if file_path.endswith('.docx'):
            self.ModifyDocxDate(file_path, date_type, target_date)
        elif file_path.endswith('.pdf'):
            self.ModifyPdfDate(file_path, date_type, target_date)
        else:
            wx.MessageBox('只支持 .docx 和 .pdf 文件', '错误', wx.OK | wx.ICON_ERROR)

    def ModifyDocxDate(self, file_path, date_type, target_date):
        doc = Document(file_path)
        if date_type == '修改日期':
            doc.core_properties.modified = target_date
        else:
            doc.core_properties.created = target_date
        doc.save(file_path)
        wx.MessageBox('文件日期已成功修改', '成功', wx.OK | wx.ICON_INFORMATION)

    def ModifyPdfDate(self, file_path, date_type, target_date):
        with open(file_path, 'rb') as file:
            reader = PdfFileReader(file)
            writer = PdfFileWriter()

            for page_num in range(reader.getNumPages()):
                writer.addPage(reader.getPage(page_num))

            if date_type == '修改日期':
                writer.updateInfo({'/ModDate': target_date.strftime('%Y%m%d%H%M%S')})
            else:
                writer.updateInfo({'/CreationDate': target_date.strftime('%Y%m%d%H%M%S')})

            with open(file_path, 'wb') as new_file:
                writer.write(new_file)

        wx.MessageBox('文件日期已成功修改', '成功', wx.OK | wx.ICON_INFORMATION)

if __name__ == '__main__':
    app = wx.App()
    frame = DateModifierApp()
    frame.Show()
    app.MainLoop()

代码分析:日期修改器

简介

日期修改器是一款使用 Python 开发的工具,可以帮助用户修改 Word (.docx)  文档的日期信息。

代码结构

  • 导入库:

    Python

    import wx
    import os
    import datetime
    from docx import Document
    from PyPDF2 import PdfFileReader, PdfFileWriter
    
    导入必要的 Python 库,包括 GUI 界面库 wxPython、日期处理库 datetime、Word 文档操作库 docx 。
  • 主类: DateModifierApp
    • 初始化方法 __init__():
      • 创建主窗口并设置标题。
      • 调用 InitUI() 方法初始化界面元素。
    • 界面初始化方法 InitUI()
      • 创建面板并使用垂直布局管理器 (wx.BoxSizer) 进行布局。
      • 添加文件选择控件 file_picker,允许用户选择要修改的文档。
      • 添加日期类型选择下拉框 date_type_choice,提供“修改日期”和“创建日期”两种选项。
      • 添加目标日期输入框 date_input_ctrl,用于输入目标日期。
      • 添加“修改”按钮 modify_btn,触发点击事件时调用 ModifyDate() 方法。
    • 修改日期方法 ModifyDate()
      • 获取文件路径、日期类型和目标日期。
      • 校验目标日期格式,如不正确则弹出错误提示框。
      • 根据文件格式调用 ModifyDocxDate()ModifyPdfDate() 方法进行修改。
    • 修改 Word 文档日期方法 ModifyDocxDate()
      • 使用 docx 库打开文档。
      • 根据日期类型修改 core_properties 属性中的相应日期。
      • 保存修改后的文档。
  • 入口函数:
    • 创建 wx 应用程序对象 app
    • 创建主窗口对象 frame 并显示。
    • 启动应用程序事件循环 app.MainLoop()

结语

日期修改器是一款小巧实用的工具,可以帮助您轻松管理文档的日期信息。如果您有此类需求,不妨尝试使用这款软件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode146.LRU缓存,从算法题引入,全面学习LRU和链表哈希表知识

leetcode146. LRU 缓存 题目链接 请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关…

三种字符串的管理方式

NSString的三种实现方式 OC这个语言在不停的升级自己的内存管理,尽量的让自己的 OC的字符串 问题引入 在学习字符串的过程中间会遇到一个因为OC语言更新造成的问题 例如: int main(int argc, const char * argv[]) {autoreleasepool {NSString* str1 …

ZCU102启动镜像(详细版)

ZCU102启动镜像--详细版本 详细步骤1、安装好Vitis(GUI界面)、 Vivado、 Petalinux软件然后vivado这边的操作就先结束了 创建Petalinux工程编译镜像打包 详细步骤 B站参考视频链接: link 1、安装好Vitis(GUI界面)、 Vivado、 Pe…

SpringBoot:手动创建应用

Spring提供了在线的Spring Initialzr在线创建Spring Boot项目,为了更好的理解Spring Boot项目,这里我们选择手动创建。 1.新建Web应用 1.1 生成工程 首先要做是创建一个Java项目,这里我们选择使用Maven来支持,使用archetype:ge…

C++进阶之AVL树+模拟实现

目录 目录 一、AVL树的基本概念 1.1 基本概念 二、AVL树的模拟实现 2.1 AVL树节点的定义 2.2 插入操作 2.3 旋转操作 2.4 具体实现 一、AVL树的基本概念 1.1 基本概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树&…

【论文速读】Self-Rag框架,《Self-Rag: Self-reflective Retrieval augmented Generation》

关于前面的文章阅读《When to Retrieve: Teaching LLMs to Utilize Information Retrieval Effectively》,有网友问与Self-Rag有什么区别。 所以,大概看了一下Self-Rag这篇论文。 两篇文章的方法确实非常像,Self-Rag相对更加复杂一些。 When …

图数据库Neo4j——Neo4j简介、数据结构 Docker版本的部署安装 Cypher语句的入门

前言 MySQL是一种开源的关系型数据库管理系统,使用SQL作为其查询语言,常见的关系型数据库有MySQL、Oracle、SQL Server、PostgreSQL等。相关博客文章如下: 【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身PostgreSQL数…

计算机系统结构之流水

一、标量流水线的主要性能 吞吐率是流水线单位时间里能流出的任务数或结果数(最大吞吐率:单位时间内计算机所能处理的最多指令条数)。 流水线中经过时间最长的子过程成为瓶颈子过程。最大吞吐率取决于瓶颈段的时间。 实际吞吐率: 加速比: …

教你搞一个比较简单的计时和进度条装饰器 (多线程进阶版)

简单的计时和进度条装饰器 - 多线程进阶版 这个进阶版有什么?话不多说上代码效果图 上一篇关于装饰器的Blog 这个进阶版有什么? 在上一个装饰器工作时,跑了20秒后就停止了。如果运行的函数跑了60秒,后面的40秒我们是只能等到结束…

CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加

1. 创建工程 2. 需要引入的依赖 如图,去掉依赖复制到本地 3. 代码实现 RibbonTool.cs 实现添加Ribbon选项卡,添加面板,以及给面板添加下拉组合按钮。 using Autodesk.Windows; using System; using System.Collections.Generic; using S…

悬剑武器库5.04版

工具介绍 悬剑5 基于“悬剑网盘”精选工具集悬剑5“飞廉”云武器库制作。 操作系统:Windows 10 专业版 锁屏密码:secquan.org 解压密码: 圈子社区secquan.org 镜像大小:33.1GB 系统占用空间63.0 GB 镜像导入 下载镜像,文末…

WordPress博客主题触屏版社区源码

下载地址:WordPress博客主题触屏版社区源码

【Unity之FGUI】黑神章Fairy GUI控件详解

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:就业…

python采集汽车价格数据

python采集汽车价格数据 一、项目简介二、完整代码一、项目简介 本次数据采集的目标是车主之家汽车价格数据,采集的流程包括寻找数据接口、发送请求获取响应、解析数据和持久化存储,先来看一下数据情况,完整代码附后: 二、完整代码 #输入请求页面url #返回html文档 imp…

6.3 Go 结构体(Struct)

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

普华永道信任危机:上市公司解约风波与反思

在全球会计业界的星空中,普华永道无疑是那颗最为耀眼的星之一。然而,近日这颗星却遭遇了前所未有的信任危机。这家大名鼎鼎的四大会计师事务所之一,近期陷入了上市公司解约的风波之中,其声誉与地位正面临严峻挑战。 就在昨晚&…

Word2Vec模型的引入介绍与相关概念

一 、Word2Vec模型的背景引入 1.1 One-hot模型 One-hot模型是是用N位的状态寄存器对N个状态进行编码 如下所示,是有4个样本,每个样本都有三个特征,特征1表示当前样本的性别。 我们喂给算法怎么样的数据,算法就会给我们一个怎么…

学习笔记——IP地址网络协议——网络层(IP)协议

一、网络层(IP)协议 网络层(被称为IP层)但网络层协议并不只是IP协议,还包括ICMP(Internet Control Message Protocol)协议、IPX(Internet Packet Exchange)协议等。 1、IP协议 IP(Internet Protocol)本身是一个协议文件的名称,该协议文件的内容非常少&…

使用python统计word文档页数

使用python统计word文档页数 介绍效果代码 介绍 使用python统计word文档的页数 效果 代码 import os import comtypes.clientdef get_word_page_count(docx_path):try:# Initialize the COM objectword comtypes.client.CreateObject(Word.Application)word.Visible False…

【Qt】探索Qt绘图世界:自定义控件与视觉效果的全面指南

文章目录 前言:1. 绘图基本概念2. 绘制各种形状3. 绘制文字(显示文字)、设置画笔4. 画刷5. 绘制图片6. 特殊的绘图设备总结: 前言: 在软件开发中,图形用户界面(GUI)的设计是至关重要…