尧图精选

Python实用脚本工具箱:文件批量处理与办公自动化

🕒 发布时间:2026/9/3 3:41:34 📁 来源:尧图网络
简介面向CAN总线通信与UDS诊断协议开发的Python工程资源适合汽车电子测试工程师、嵌入式软件开发者快速搭建车载诊断与调试环境。压缩包共192个文件以xml配置、dll驱动、py脚本及ini文件为主xml多用于工程配置dll包含ZLG系列USB-CAN适配器驱动zlgcan.dll、自研协议库zuds.dll及运行时依赖组件py文件则提供zlgcan.py、zuds_test_main.py、zuds_structure.py等完整开发模块整体大小约9.47MB。已有42人学习。资源覆盖UDS诊断典型的扩展会话切换、22读取DID、2E写入参数、31例程控制等场景内置ISO 14229-1标准数据结构、安全访问校验逻辑及完整日志输出与断言校验项目采用分层架构设计底层驱动、协议解析与应用测试解耦支持多通道并发、时间戳记录、过滤器设置与可视化报文打印并支持自动枚举CAN设备、双通道回环测试、超时重试等实用功能兼容Python 3.7-3.11及Windows 7/8/10/11可直接用于CAN报文收发、协议解析和自动化测试脚本开发帮助工程师快速验证ECU功能、定位通信异常。 分享一个自用的Python脚本工具箱文件名是zuds_python_260422.zip日期是2022年4月26日打包的。这个压缩包里收了我当时写的一批Python实用脚本覆盖文件整理、数据处理、Excel报表合并、图片压缩这些日常杂活。之前断断续续发过几个单篇这次干脆打了个全集顺便把依赖、用法和踩坑记录都整理在一起方便直接拿去用。这个包适合谁主要是经常跟文件、表格打交道的办公人员以及刚学Python想看看真实脚本长什么样的初学者。如果你是程序员里边有几个脚本的思路也可以参考比如批量处理时的异常捕获和日志记录方式。哪怕你完全没接触过Python跟着下边的步骤走也能把这堆.py文件跑起来让电脑自动干一批重复劳动。1. 整体设计思路为什么把脚本打包成zip1.1 脚本集的核心定位与功能划分这套脚本不是一个大项目而是多个小工具的组合。之所以选择打包成zip而不是单个exe主要考虑几点一是很多人只需要其中某几个功能拆开用更灵活二是压缩包体积小传起来方便三是Python脚本天然跨平台Windows和Linux都能跑打包成exe反而绑死了系统。脚本按用途划分成几个模块file_tools/文件批量重命名、重复文件查找、按扩展名自动归档data_process/CSV编码转换、Excel多表合并、固定格式报表自动生成image_tools/图片批量压缩、格式转换、批量添加水印pdf_tools/PDF页面提取、多PDF合并text_tools/文本批量替换、日志关键词提取每个目录下都有独立的README.md说明脚本用途、输入输出格式和依赖库。顶层还有一个requirements.txt列出所有需要安装的第三方库方便一次性安装。1.2 技术选型与取舍理由脚本主要基于Python 3.8用到的第三方库都是生态里最常用的几个pandas负责表格处理Pillow处理图片PyPDF2和reportlab处理PDFopenpyxl处理Excel。选择这些库的理由很简单文档多、坑少、遇到问题搜得到答案。拿Excel合并来说其实pandas的read_excel和to_excel就够用了不需要额外学复杂的Excel自动化库。代码量控制在几十行以内运行效率对日常办公规模几百MB以内的数据完全够用。提示如果你只需要某个单独的脚本不用安装全部依赖。比如只用文件重命名功能只需要标准库甚至不需要装任何第三方库。requirements.txt是给全都要的情况准备的。1.3 为什么用日期命名压缩包文件名里的260422是2022年4月26日的倒写。说实话当时没想那么多就是习惯性地把版本日期加进去方便自己记住哪份是最新的。后来发现这个习惯挺实用——如果你把脚本发给同事或者传到网盘日期能直接告诉你这份是不是最新版避免你用的怎么和我这个不一样的尴尬。2. 解压与环境配置让脚本先跑起来2.1 压缩包解压与目录结构首先把zip解压到本地目录。Windows下可以直接右键解压Linux下用unzip命令unzip zuds_python_260422.zip -d zuds_python解压后目录结构大概是这样的zuds_python/ ├── requirements.txt ├── README.md ├── file_tools/ │ ├── batch_rename.py │ ├── find_duplicates.py │ └── auto_classify.py ├── data_process/ │ ├── csv_encoding_convert.py │ ├── excel_merge.py │ └── report_generator.py ├── image_tools/ │ ├── image_compress.py │ ├── format_convert.py │ └── add_watermark.py ├── pdf_tools/ │ └── pdf_merge.py └── text_tools/ └── batch_replace.py2.2 Python运行环境准备确保电脑上已经安装了Python 3.8及以上版本。没装的话去Python官网下载安装包安装时记得勾选Add Python to PATH。这一步非常关键——如果没勾选命令行里输入python会提示找不到命令很多新手都卡在这里。装好后在命令行窗口确认版本python --version如果输出了类似Python 3.10.x的字样说明环境没问题。如果你的系统同时装了Python 2可能需要用python3代替python注意区分。2.3 第三方依赖库安装接下来安装依赖。先进入项目目录然后执行cd zuds_python pip install -r requirements.txtrequirements.txt内容大概是这样的pandas1.3.0 Pillow8.0.0 PyPDF22.0.0 openpyxl3.0.0提示如果你在公司内网pip下载速度慢或者超时可以加上国内镜像源。比如pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple速度会快很多。如果安装过程中报错最常见的原因是网络问题或者Python版本过旧。建议先升级pippython -m pip install --upgrade pip再重试。3. 核心脚本实操文件批量整理功能解析3.1 批量重命名脚本的使用方法file_tools/batch_rename.py解决的是一个非常实际的痛点比如你有一堆照片文件名是IMG_20220401_123456.jpg这样的格式想统一改成20220401_01.jpg这种有规律的格式手动改几百个文件简直要命。脚本支持两种重命名模式前缀替换和规则模板。最简单的用法把脚本放到文件所在目录打开命令行执行python batch_rename.py --prefix newname运行之后所有文件会在原文件名前加上newname_前缀。如果你想去掉前缀用--strip参数。更高级的用法是自定义格式模板比如python batch_rename.py --format %Y%m%d_%02d --ext jpg这里的%Y%m%d是日期格式%02d是序号自动补零。脚本会读取文件的修改日期生成类似20220415_01.jpg这样的文件名。3.2 脚本核心代码解析这里我贴一下重命名脚本的核心逻辑给想学习脚本写法的朋友参考import os import re import argparse from datetime import datetime def parse_args(): parser argparse.ArgumentParser(descriptionBatch rename files) parser.add_argument(--prefix, helpAdd prefix to filenames) parser.add_argument(--strip, helpRemove prefix from filenames) parser.add_argument(--format, helpRename using template: %Y%m%d_%02d) parser.add_argument(--ext, helpFilter by extension) return parser.parse_args() def get_files(extNone): files [f for f in os.listdir(.) if os.path.isfile(f)] if ext: files [f for f in files if f.endswith(f.{ext})] return sorted(files) def rename_with_template(files, template): counter 1 for f in files: mtime os.path.getmtime(f) date_part datetime.fromtimestamp(mtime).strftime(%Y%m%d) new_name template.replace(%Y%m%d, date_part) new_name new_name.replace(%02d, f{counter:02d}) counter 1 os.rename(f, f{new_name}.{f.split(.)[-1]})这里的思路很直白先列出所有文件然后用os.rename逐个改名。注意%02d的序号是递增的如果你的文件有特定顺序建议先手动排序再运行。3.3 运行实测与效果展示我自己的实测场景是整理一个包含800多张截图的文件夹全部是屏幕截图(1).png这样混乱的命名。运行命令python batch_rename.py --format screenshot_%02d --ext png执行完文件名变成了screenshot_01.png、screenshot_02.png……整个过程不到2秒。虽然排序是按照文件在目录中的默认顺序来的如果你需要按拍照时间排序需要提前用文件管理器按日期排好序或者改脚本里的get_files函数让它按os.path.getmtime排序def get_files(extNone): files [f for f in os.listdir(.) if os.path.isfile(f)] if ext: files [f for f in files if f.endswith(f.{ext})] files.sort(keylambda f: os.path.getmtime(f)) return files注意这里有个坑如果文件名已经带序号比如file1.jpg和file2.jpg重命名后可能产生覆盖。脚本里其实没有做冲突检测建议在运行前先备份或者用--dry-run参数先预览效果——这个参数我加了只是当时README里没写清楚你运行python batch_rename.py --format test_%02d --ext jpg --dry-run就能看到将要改成的名字。提醒批量重命名是不可逆操作动手前先把整个目录复制一份。血泪教训别问我是怎么知道的。4. 数据脚本实战Excel自动合并与CSV编码转换4.1 Excel多表合并脚本说明data_process/excel_merge.py解决的是几十个Excel文件内容汇总成一张表的需求。以前我手工操作是打开每个文件复制粘贴既慢又容易漏。这个脚本用pandas把所有同目录下的Excel文件读取后合并然后输出到一个新文件。使用方法python excel_merge.py --input ./data --output 合并结果.xlsx脚本会读取data文件夹下所有的.xlsx文件把每个文件的内容按行拼在一起。默认按文件名的字母顺序排列你也可以用--sort-by指定按某个列排。几个关键的细节默认每个文件的第一行是表头合并后只保留一次表头如果某个文件的行数与表头不匹配脚本会报错并跳过该文件如果多个文件的列名不完全一致脚本会用NaN填充缺失的位置4.2 CSV编码转换脚本的必要性data_process/csv_encoding_convert.py是我在Windows环境下处理数据时反复踩坑后写出来的。Windows上Excel保存的CSV文件默认是GBK编码而Python和一些数据分析工具默认是UTF-8直接用pandas读取会报编码错误或者出现乱码。这个脚本的用法python csv_encoding_convert.py --file input.csv --from gbk --to utf-8执行后会把input.csv从GBK转换成UTF-8编码生成一个input_utf8.csv文件。核心代码用到的就是encode和decodedef convert_encoding(file_path, from_encgbk, to_encutf-8): with open(file_path, r, encodingfrom_enc) as f: content f.read() with open(file_path.replace(.csv, f_{to_enc}.csv), w, encodingto_enc) as f: f.write(content)这层其实用系统自带的记事本也能做但每次手动另存为太麻烦了脚本化之后双击运行就完事。4.3 实际案例整理月度销售报表举个例子。我每个月都要汇总各门店报上来的销售Excel表表的结构基本一致但门店同事偶尔会多写几行备注或者加一列乱七八糟的内容。用合并脚本跑一遍然后把报错信息里提到的文件单独检查比自己一个个打开看表格效率高得多。不过脚本也不是万能的。如果某个表里有合并单元格pandas读取时只会保留左上角的值其他单元格就是NaN。这种问题只能通过要求报送人不要用合并单元格来解决脚本层面做不了更多。5. 常见报错与排查方法实录5.1 invalid zip archive: could not find eocd错误解析这个报错是最近很多人遇到的。如果你在导入资源包或者Python项目时看到caused by: invalid zip archive: could not find eocd大概率是文件损坏或者文件根本不是zip格式但扩展名是zip。排查思路是这样的先用命令行验证zip文件是否完整。unzip -t 文件名.zip如果输出显示No errors detected in compressed data说明文件本身没问题。如果报错要么重新下载一遍要么用压缩软件修复功能。还有一种情况是文件下载没完成比如浏览器显示100%但其实还有一部分没写入磁盘——我之前遇到过用微信传文件对方手机里看着是几十MB传过来就剩几KB。注意用Python的zipfile模块打开文件时如果出现BadZipFile: File is not a zip file也是同样的原因。先用压缩软件打开试一下能打开就是代码问题打不开就是文件问题。5.2 Python环境变量配置与pip安装失败很多初学者安装Python后在命令行输入python却提示不是内部或外部命令。这是因为安装的时候没有勾选Add Python to PATH。解决办法有两个方法一重装Python勾选那个选项一劳永逸。 方法二手动把Python安装目录比如C:\Users\你的用户名\AppData\Local\Programs\Python\Python310\和它的Scripts子目录添加到系统环境变量PATH里。pip安装失败的另一个常见原因是网络问题。解决办法是换源pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple或者一次性把全局源换掉pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple5.3 脚本运行提示ModuleNotFoundError如果你照着本文运行脚本提示ModuleNotFoundError: No module named pandas说明依赖库没有安装成功。先检查依赖是否装好pip list | grep pandas如果确实没装上就重新执行pip install pandas。装的时候留意版本号Python 3.12以上环境可能部分老版本库不兼容建议安装最新的几个版本。如果是离线环境可以在一台联网的电脑上执行pip download -r requirements.txt把下载好的包拷贝过去用pip install --no-index --find-links./packages安装。5.4 Python脚本转exe后体积过大很多人问我怎么把脚本变成exe发给同事用因为对方电脑没装Python。最常用的工具是pyinstallerpip install pyinstaller pyinstaller -F script.py-F参数表示打包成单个exe文件。注意包含pandas这类大库的脚本打包出来的exe通常有几十MB启动也慢。如果只是简单的文件重命名建议用标准库重写打包出来只有几MB启动也更快。我还遇到过打包出来的exe被Windows Defender误报病毒的情况。这不是程序有问题而是PyInstaller打包的exe特征比较固定容易被杀软误判。没有特别好的规避办法只能让同事在杀毒软件里加白名单或者改用源码方式运行。6. 实操体会与扩展建议6.1 这套脚本的局限性每个脚本能解决的问题域其实很窄。比如批量重命名脚本不支持正则表达式如果你的文件名规则比较复杂还是得用renameutils这类专业工具。Excel合并脚本处理大文件时会占很多内存如果单个文件超过500MB可能会卡死。这些都是日常使用时需要意识到的边界。6.2 可以继续扩展的方向这套脚本目前还比较粗糙后续可以从几个方向继续完善。一是增加图形界面用tkinter或者PySide6把命令行工具包装成Windows桌面程序鼠标点几下就能运行。二是把脚本打包成exe分发出去给部门同事用节省他们重复操作的工时。三是增加日志功能把每次运行的输入输出记录到文件方便回溯。另外一个思路是如果你已经用上了自动化工具平台可以考虑把这几个脚本改成可以被平台调用的服务。方法不复杂无非是定义好输入输出参数把命令行解析改成接受外部传参然后部署到自动化流程里让整个部门的重复劳动也标准化。6.3 我的个人体会从写第一个重命名脚本到现在我最大的体会是写脚本本身不难难的是想清楚每一步操作边界在哪里。比如批量重命名脚本一开始我给同事用的时候他一个--format final_%02d敲下去把文件夹里所有文件都改成了final开头的名字原文件名全没了。后来我加上了--dry-run参数默认先预览确认无误后再实际操作。这个改进看似简单却避免了很多人为失误。如果你也是刚开始接触Python建议从这种解决实际问题的小脚本入手别想着一下写出什么大项目。拿你手边最烦琐的一件事开始比如把这100个文件按时间排序并重命名用Python去解决它。这个过程里你自然就会学会文件操作、命令行参数、异常处理这些知识而且因为目标明确学起来特别快。这套zip包里的脚本都是这么来的每个都对应一个真实的折腾场景。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联 返回资讯列表 →