Skip to content

Jinger52035/PatchToolPy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PatchTool

一款基于 PyQt6 的可视化桌面工具,提供文件夹比较与补丁管理UE MemReport 内存分析两大核心功能。

支持中英文双语切换。


目录


安装与运行

环境要求

  • Python 3.11+
  • Windows 10/11

安装依赖

pip install -r requirements.txt

仅依赖 PyQt6>=6.6,无其他第三方库。

启动

python main.py

功能一:文件夹比较

切换到 「文件夹比较」 标签页。

比较文件夹

  1. 点击左侧 「浏览...」 选择源文件夹
  2. 点击右侧 「浏览...」 选择目标文件夹
  3. 点击 「比较」 按钮开始对比

比较完成后,结果以双栏树形表格展示:

标记颜色 含义 说明
白色 相同 文件内容一致(MD5 匹配)
粉色 修改 文件存在但内容不同
蓝色 新增 仅在目标(右侧)文件夹存在
紫色 删除 仅在源(左侧)文件夹存在

工具栏功能:

  • 过滤按钮:点击「相同」「修改」「仅右侧」「仅左侧」可单独显示/隐藏对应类别
  • 交换按钮:快速交换左右文件夹路径
  • 全部展开/全部折叠:控制目录树的展开状态
  • 底部统计栏实时显示各类文件数量

查看文件差异

双击任意一行文件,打开 Diff 查看器

  • 文本文件:左右分栏对比,绿色标记新增行,红色标记删除行,支持同步滚动
  • 二进制文件:显示 MD5 校验值、首个差异位置、十六进制对比视图(Offset / Hex / ASCII 三栏),差异字节高亮标记

生成补丁

  1. 完成文件夹比较后,点击 「生成补丁」
  2. 选择保存路径,生成 .patch 文件

补丁文件本质是 ZIP 压缩包,内部结构:

patch_file.patch (ZIP)
├── manifest.json      # 变更清单(新增/修改/删除列表 + 元信息)
└── files/             # 新增和修改后的完整文件
    ├── path/to/added_file.txt
    └── path/to/modified_file.dat

应用补丁

  1. 点击 「应用补丁」
  2. 选择 .patch 文件
  3. 选择要应用补丁的目标文件夹
  4. 确认弹窗中显示的操作明细(新增/修改/删除文件数量),确认后执行

功能二:MemReport 分析

切换到 「MemReport 分析」 标签页。用于解析 Unreal Engine 的 memreport -full 命令导出的内存报告文件。

导入文件

  1. 点击 「导入文件」
  2. 选择一个或多个 .memreport / .txt / .log 文件
  3. 导入时自动在原文件旁生成同名 .json 中间数据文件

多文件导入后可通过顶部下拉框切换查看。

浏览数据

界面左侧为 分区导航树,点击任意分区在右侧查看详情:

  • 总览:展示文件路径、分区列表摘要(类型、行数/条目数)
  • 表格类型(如 Obj List、RenderTargets、ListTextures):
    • 支持 点击表头排序(升序/降序)
    • 支持 关键字搜索过滤(输入框位于表格上方)
    • 数值列自动右对齐,千分位格式化
    • 列宽自适应内容,可手动拖拽调整
  • 键值类型(如 Header、Mem FromReport):双列表格展示,键名加粗
  • 原始文本类型:等宽字体显示原文

JSON 中间数据

导入 .memreport 时自动生成 .json 文件,也可以点击 「导出 JSON」 手动导出到指定路径。

JSON 结构示例:

{
  "filepath": "S:/data/report.memreport",
  "filename": "report.memreport",
  "sections": [
    {
      "name": "Header",
      "type": "kv",
      "data": {
        "Platform Memory Stats for Windows": "",
        "Process Physical Memory": "2134.45 MB used, 2256.78 MB peak"
      }
    },
    {
      "name": "obj list -countsort",
      "type": "table",
      "headers": ["Class", "Count", "NumKB", "MaxKB", "ResExcKB", "ResExcDedSysKB", "ResExcDedVidKB", "ResExcUnkKB"],
      "rows": [
        ["Texture2D", "1736", "2479.24", "2560.12", "451324.00", "0.00", "451324.00", "0.00"]
      ]
    },
    {
      "name": "RenderTargets",
      "type": "table",
      "headers": ["SizeMB", "Dimensions", "ArrayCount", "Mips", "Name", "Format", "UnusedFrames"],
      "rows": [
        ["256.000", "16384x2048", "2", "1", "Shadow.Virtual.PhysicalPagePool", "R32_UINT", "0"]
      ]
    }
  ]
}

三种分区类型:

type 说明 字段
table 表格数据 headers (列名数组) + rows (二维数组)
kv 键值对 data (对象)
raw 原始文本 lines (字符串数组)

支持的数据分区

解析器自动识别以下 UE MemReport 命令/区块:

分区 解析类型 说明
Header 键值 平台内存统计、进程物理/虚拟内存
DumpParticleMem 表格 粒子系统内存明细
ConfigMem 表格 配置文件缓存大小
RenderTargets 表格 渲染目标池内存(尺寸、格式、Mip 数)
RenderTargets Summary 键值 渲染目标池汇总(总量/已用/未用)
ListTextures 表格 全部纹理列表(尺寸、格式、LOD 组、流送状态)
ListParticleSystems 表格 粒子系统资源占用
obj list class=XXX 表格 指定类型对象列表(SoundWave / SkeletalMesh / StaticMesh 等)
ListAnims 表格 动画序列列表
Mem FromReport 键值 STAT 格式内存汇总(544+ 条目)
rhi.DumpMemory 键值 RHI 显存分配明细
obj list -countsort 表格 全类型对象计数排序(Class / Count / NumKB / ResExcKB 等)

同时兼容简单格式的 memreport 文件(无 MemReport: Begin/End command 包裹,靠区块标题自动识别)。


打包为 exe

python build.py

自动安装 PyInstaller(如未安装)并打包为单文件可执行程序,输出到 dist/PatchTool.exe。打包配置在 build.spec 中,默认无控制台窗口。


项目结构

PatchTool/
├── main.py                          # 入口
├── requirements.txt                 # 依赖 (PyQt6)
├── build.py                         # 打包脚本
├── build.spec                       # PyInstaller 配置
├── app/
│   ├── main_window.py              # 主窗口(菜单栏、标签页、状态栏)
│   ├── i18n.py                     # 中英文翻译字典
│   ├── styles.py                   # QSS 样式表
│   ├── compare/
│   │   ├── compare_engine.py       # 文件夹比较引擎(递归遍历 + MD5 哈希)
│   │   ├── compare_widget.py       # 比较界面(双栏树形视图 + 过滤 + 统计)
│   │   ├── diff_viewer.py          # Diff 查看器(文本对比 + Hex 对比)
│   │   └── patch_engine.py         # 补丁生成与应用(ZIP 格式 + manifest)
│   ├── memreport/
│   │   ├── memreport_parser.py     # MemReport 解析器(CSV / 表格 / KV / STAT 自动识别)
│   │   └── memreport_widget.py     # MemReport 查看界面(搜索 / 排序 / JSON 导出)
│   └── widgets/
│       └── folder_selector.py      # 文件夹选择器组件
└── test_data/                      # 测试数据

About

PatchTool Python version

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages