使用Python 打造多格式文件预览工具 — 图、PDF、Word、Excel 一站式查看

news2025/7/13 5:48:31

在日常办公或文件管理场景中,我们经常面临这样的问题:在一个文件夹中短时间内产生了大量不同类型的文件(如图片、PDF、Word、Excel),我们需要快速浏览和筛选这些文件的内容,却不希望一个个打开它们。有没有办法将这些文件集中预览、筛选和操作?

本文将带你打造一个基于 wxPython 的多格式文件浏览与预览工具,支持文件夹选择、最近一天文件筛选、图文文档预览、页码控制、压缩打包、文件复制等多项实用功能。
C:\pythoncode\new\ViewFileAndZipAndCopy.py

一、功能概览

该工具具备以下核心功能:

  1. 文件夹选择:通过 GUI 选择任意文件夹。

  2. 筛选最新文件:自动列出过去 24 小时内修改或创建的文件。

  3. 多类型预览支持

    • 图片(JPG/PNG/BMP/GIF)
    • PDF(支持翻页)
    • Word(.docx,以 HTML 模式显示)
    • Excel(显示为列表控件)
  4. 文件复选操作:支持对文件进行勾选,便于批量操作。

  5. 文件压缩与复制:将勾选文件打包为 ZIP,或复制到目标文件夹。

  6. 分页预览控制:针对 PDF,提供上一页/下一页导航按钮。


二、应用场景

这个工具适用于以下典型场景:

  • 企业文档审核:在文档提交截止前查看最近更新的项目文档。
  • 技术支持或维护日志审核:快速翻阅技术支持部门刚上传的截图、报告、系统日志。
  • 内容策划与编辑:在多媒体内容创作场景中,快速预览当天采集的素材。
  • 文件归档前审查:在正式归档前核查文档内容和格式。

三、界面布局与技术实现

1. 总体结构:SplitterWindow 分割主界面

self.splitter = wx.SplitterWindow(self)
self.left_panel = wx.Panel(self.splitter)
self.right_panel = wx.Panel(self.splitter)
self.splitter.SplitVertically(self.left_panel, self.right_panel)
  • 左侧用于显示文件列表、控制按钮;
  • 右侧用于显示预览内容和翻页控件。

2. 文件筛选逻辑:列出最近 24 小时文件

one_day_ago = time.time() - (24 * 60 * 60)
for root, dirs, filenames in os.walk(folder_path):
    for filename in filenames:
        file_path = os.path.join(root, filename)
        if os.path.getmtime(file_path) >= one_day_ago:
            files.append(file_path)

这段代码遍历目标文件夹及其子目录,只保留“修改时间在过去 24 小时之内”的文件。


3. 多格式文件预览实现

图片预览
img = wx.Image(file_path, wx.BITMAP_TYPE_ANY)
img = img.Scale(preview_size.width, preview_size.height)
self.image_preview.SetBitmap(wx.Bitmap(img))

使用 wx.Image 载入并缩放图像,然后通过 wx.StaticBitmap 显示。

PDF 预览(支持翻页)
self.doc = fitz.open(file_path)
page = self.doc[self.current_page]
pix = page.get_pixmap(matrix=fitz.Matrix(1.5, 1.5))
img = wx.Image(pix.width, pix.height, pix.samples)

借助 PyMuPDF(即 fitz),将 PDF 页渲染成图像,再通过 wxWidgets 展示。

Word 预览
doc = docx.Document(file_path)
html = "<html><body>" + "".join(f"<p>{para.text}</p>" for para in doc.paragraphs) + "</body></html>"
self.doc_preview.SetPage(html)

Word 内容解析为 HTML,再使用 wx.html2.WebView 来显示。

Excel 预览
df = pd.read_excel(file_path)
for i, col in enumerate(df.columns):
    self.excel_preview.InsertColumn(i, str(col))
for index, row in df.iterrows():
    self.excel_preview.InsertItem(index, str(row[0]))

利用 pandas 读取表格并填入 wx.ListCtrl 控件中。


4. 文件压缩与复制按钮(待补充功能)

self.zip_button = wx.Button(button_panel, label="压缩选择文件")
self.copy_button = wx.Button(button_panel, label="复制选择文件")

目前绑定事件函数尚未实现(代码略去),后续可以通过 zipfile.ZipFile 实现 ZIP 操作,使用 shutil.copy 进行文件复制。


运行结果

在这里插入图片描述
在这里插入图片描述

四、总结

如果你经常处理多种类型的文档,或者你是一位内容审核员、资料整理者,那么这个工具将大幅提升你的工作效率。

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

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

相关文章

[docker基础四]容器虚拟化基础之 LXC

目录 一 认识LXC 二 LXC容器操作实战 1&#xff09;实战目的 2&#xff09;基础知识 lxc-checkconfig lxc-create lxc-start lxc-ls lxc-info lxc-attach lxc-stop lxc-destory 3&#xff09;安装LXC(我的是Ubuntu) 4&#xff09;操作实战 1. 检查 lxc 是否运行…

路由策略和策略路由的区别以及配置案例

区别 路由策略&#xff1a;路由策略是通过ACL等方式控制路由发布&#xff0c;让对方学到适当路由条目&#xff0c;比如有20条路由&#xff0c;只想让某个路由器学到10条&#xff0c;可以通过路由策略进行过滤。 策略路由&#xff1a;策略路由是通过定义策略和应用&#xff0c…

MAD-TD: MODEL-AUGMENTED DATA STABILIZES HIGH UPDATE RATIO RL

ICLR 2025 spotlight paper 构建能够在少量样本下学习出优良策略的深度强化学习&#xff08;RL&#xff09;智能体一直是一个极具挑战性的任务。为了提高样本效率&#xff0c;近期的研究尝试在每获取一个新样本后执行大量的梯度更新。尽管这种高更新-数据比&#xff08;UTD&am…

PyTorch API 10 - benchmark、data、批处理、命名张量

基于 PyTorch 2.7 文章目录 基准测试工具 - torch.utils.benchmarktorch.utils.bottlenecktorch.utils.checkpointtorch.utils.cpp_extensiontorch.utils.data数据集类型映射式数据集可迭代式数据集 数据加载顺序与采样器加载批处理与非批处理数据自动批处理&#xff08;默认情…

后缀表达式+栈(详解)(c++)

前言 很抱歉&#xff0c;上一期没有介绍栈stack的用法&#xff0c;今天简要介绍一下&#xff0c;再讲讲后缀表达式&#xff0c;用stack栈做一些后缀表达式的练习。 栈 栈stack是c中系统给出的栈&#xff0c;有了它&#xff0c;就不用自己创建栈啦&#xff01; 头文件 栈sta…

[C++类和对象]构造函数和析构函数

类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f; 并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6 个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会…

onenet连接微信小程序(mqtt协议)

一、关于mqtt协议 mqtt协议常用于物联网&#xff0c;是一种轻量级的消息推送协议。 其中有三个角色&#xff0c;Publisher设备&#xff08;客户端&#xff09;发布主题到服务器&#xff0c;其他的设备通过订阅主题&#xff0c;获取该主题下的消息&#xff0c;Publisher可以发…

人脸真假检测:SVM 与 ResNet18 的实战对比

在人工智能蓬勃发展的当下&#xff0c;人脸相关技术广泛应用于安防、金融、娱乐等诸多领域。然而&#xff0c;随着人脸合成技术的日益成熟&#xff0c;人脸真假检测成为保障这些应用安全的关键环节。本文将深入探讨基于支持向量机&#xff08;SVM&#xff09;结合局部二值模式&…

《AI大模型应知应会100篇》第54篇:国产大模型API对比与使用指南

第54篇&#xff1a;国产大模型API对比与使用指南 ——从百度文心到通义千问&#xff0c;一文看懂国内AI平台选型 &#x1f4cc; 摘要 随着中国人工智能产业的快速发展&#xff0c;越来越多的国产大模型平台开始崭露头角。本文将系统梳理当前主流国产大模型 API&#xff08;如…

质量、重力、引力、惯性 的本质,以及虫洞

1、质量 物体,之所以,有质量源自于其微观结构。物体好比一块海绵,浸没在暗物质的海洋里。随暗物质海洋的涌动而不断移动。海绵微观结构越细密,受到暗物质海洋的裹携力就越大(好比汤勺,与漏勺对汤水的阻碍力。又好比纱窗与船帆对风的阻隔力。) 微观结构越细密,在相同表面积…

基于ssm+mysql的快递管理系统(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能&#xff1a;个人中心、用户管理、订单管理、快递员管理&#xff1b;快递员功能&#xff1a;查看订单、更新快递状态&#xff1b;派单员功能&#xff1a;订单分配、订单管理&#xff1b;客户功能&#xff1a;订单查询、个人信息维护。 作者&#xff1a;计算…

质心均匀体(引力屏蔽技术)

1、线质心体 陀螺我们都玩过,一个惯性圆盘加一个轴,旋转起来可以独脚而立。(垂直于旋转面的不平衡力,在旋转面旋转180度后,被其自身抵消,故而平衡。可抵消不平衡力的大小,取决于惯性飞轮的质量和旋转的速度)。此时,旋转的陀螺等同于一个轴线质心体(轴线上任意一点提供支…

JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码

本文项目编号 T 180 &#xff0c;文末自助获取源码 \color{red}{T180&#xff0c;文末自助获取源码} T180&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

STM32的SysTick

SysTick介绍 定义&#xff1a;Systick&#xff0c;即滴答定时器&#xff0c;是内核中的一个特殊定时器&#xff0c;用于提供系统级的定时服务。该定时器是一个24位的递减计数器&#xff0c;具有自动重载值寄存器的功能。当计数器到达自动重载值时&#xff0c;它会自动重新加载…

【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解

1.约定前后端交互接口 [请求] /book/getListByPage [参数] currentPage1&pageSize10 [响应] 返回封装的result对象对应的Json数据 2. 整体逻辑 2.1 Controller的逻辑 &#xff08;1&#xff09;把接收的参数封装为PageRequest类&#xff0c;里面有属性&#xff1a;curren…

养生:为健康生活添彩

养生是对生活的热爱&#xff0c;是为健康生活注入活力的良方。从饮食、运动到生活习惯&#xff0c;每一个方面都能让我们离健康更近一步。以下是一些实用的养生之道&#xff0c;助你开启健康生活的新旅程。 饮食养生&#xff1a;营养均衡&#xff0c;健康基石 合理的饮食是养…

服务器综合实验(实战详解)

该文章的目录部分 实验内容 实验完成步骤 虚拟机准备 配置两个虚拟机的本地仓库 虚拟机A&#xff1a; 虚拟机B&#xff1a; 配置SSH公钥互信 虚拟机A&#xff1a; ​编辑 虚拟机B&#xff1a; 提供基于bind的DNS服务 虚拟机A&#xff1a; 项目需求1&#xff1a; …

VSCode-插件:codegeex:ai coding assistant / 清华智普 AI 插件

一、官网 https://codegeex.cn/ 二、vscode 安装插件 点击安装即可&#xff0c;无需复杂操作&#xff0c;国内软件&#xff0c;无需科学上网&#xff0c;非常友好 三、智能注释 输入 // 或者 空格---后边自动出现注释信息&#xff0c;&#xff0c;按下 Tab 键&#xff0c;进…

SlideLoss与FocalLoss在YOLOv8分类损失中的应用及性能分析

文章目录 一、引言二、YOLOv8 损失函数概述三、SlideLoss 详解&#xff08;一&#xff09;SlideLoss 的原理&#xff08;二&#xff09;SlideLoss 的代码实现 四、FocalLoss 分类损失函数详解&#xff08;一&#xff09;FocalLoss 的原理&#xff08;二&#xff09;FocalLoss 的…

OpenCv实战笔记(4)基于opencv实现ORB特征匹配检测

一、原理作用 ORB 原理&#xff08;Oriented FAST and Rotated BRIEF&#xff09;&#xff1a; 特征点检测&#xff1a;使用 FAST 算法检测角点&#xff08;关键点&#xff09;。 方向计算&#xff1a;为每个关键点分配主方向&#xff0c;增强旋转不变性。 特征描述&#xff1a…