65465655 发表于 2024-10-2 21:48

mod去重工具

执行mod去重.exe或mod去重.py后输入异星工厂mods文件夹路径,会打印旧版本信息,根据提示判断是否执行删除旧版本。

exe与py文件:

**** Hidden Message *****

mods文件夹可能的路径:

在《异星工厂》(Factorio)中,玩家自定义的MOD文件通常存放在以下路径:

Windows:

游戏根目录\mods

C:\Users\[你的用户名]\AppData\Roaming\Factorio\mods

MacOS:

~/Library/Application Support/factorio/mods

Linux:

~/.factorio/mods


你可以将下载的MOD文件(通常为.zip格式)放置在该路径中,然后在游戏启动时启用这些MOD。


执行摘要:

请输入路径: c:\1\1.1.1\mods

发现的文件及其版本:
aai-signals:
- 旧版本: aai-signals_0.5.zip
- 最新版本: aai-signals_0.6.1.zip
zik-lib: zk-lib_0.16.7.zip (只有一个版本)
ZRecycling: ZRecycling_1.1.4.zip (只有一个版本)

旧版本文件总占用空间: 56.05 MB
是否删除旧版本文件?(y/n): y
已删除旧版本文件: aai-signals_0.5.zip
已删除的旧版本文件总占用空间: 56.05 MB
按 Enter 键退出...

mod去重.pyimport os
import re
from collections import defaultdict

def get_zip_files(path):
    """
    获取路径下所有.zip文件的名称
    """
    if not os.path.exists(path):
      print(f"路径 {path} 不存在,请检查路径输入。")
      return []

    # 只获取 .zip 文件
    zip_files =
    return zip_files

def extract_version(file_name):
    """
    从文件名中提取出文件的主名称和版本号
    假设文件名格式为 name_version.zip,例如: Mobile_Factory_0.11.4.zip
    """
    # 使用正则表达式匹配文件名中的版本号
    match = re.match(r"(.+?)_([\d.]+)\.zip", file_name)
    if match:
      return match.groups()# 返回 (name, version)
    else:
      return None, None

def sort_versions(files):
    """
    根据文件名和版本号对文件进行分类和排序
    返回 {name: } 的字典,并按版本号排序
    """
    file_dict = defaultdict(list)
    for file in files:
      name, version = extract_version(file)
      if name and version:
            file_dict.append((file, version))

    # 按版本号排序,假设版本号是语义化版本
    for name in file_dict:
      file_dict.sort(key=lambda x: list(map(int, x.split('.'))))

    return file_dict

def print_duplicates_and_get_old_versions(file_dict):
    """
    打印重复文件,并返回需要删除的旧版本文件列表
    """
    old_versions_to_remove = []
    print("\n发现的文件及其版本:")
    for name, versions in file_dict.items():
      if len(versions) > 1:
            print(f"{name}:")
            for file, version in versions[:-1]:# 打印除最新版本外的所有版本
                print(f"- 旧版本: {file}")
                old_versions_to_remove.append(file)
            print(f"- 最新版本: {versions[-1]}")
      else:
            print(f"{name}: {versions} (只有一个版本)")

    return old_versions_to_remove

def calculate_space(files, path):
    """
    计算文件列表所占用的总空间
    """
    total_size = 0
    for file in files:
      full_path = os.path.join(path, file)
      if os.path.isfile(full_path):
            total_size += os.path.getsize(full_path)
    return total_size

def delete_old_versions(path, old_versions):
    """
    删除旧版本文件并计算占用空间
    """
    total_size = calculate_space(old_versions, path)
   
    for file in old_versions:
      full_path = os.path.join(path, file)
      try:
            os.remove(full_path)
            print(f"已删除旧版本文件: {file}")
      except Exception as e:
            print(f"无法删除文件 {file}: {e}")

    return total_size

def main():
    path = input("请输入路径: ")

    # 获取路径下的.zip文件
    zip_files = get_zip_files(path)
    if not zip_files:
      print("没有找到.zip文件,程序结束。")
      return

    # 根据文件名和版本号进行排序
    sorted_files = sort_versions(zip_files)

    # 打印重复文件并获取要删除的旧版本文件列表
    old_versions_to_remove = print_duplicates_and_get_old_versions(sorted_files)

    if old_versions_to_remove:
      # 计算旧版本文件占用的总空间
      total_size = calculate_space(old_versions_to_remove, path)
      print(f"\n旧版本文件总占用空间: {total_size / (1024 * 1024):.2f} MB")

      user_input = input("是否删除旧版本文件?(y/n): ").lower()
      if user_input == 'y':
            deleted_size = delete_old_versions(path, old_versions_to_remove)
            print(f"已删除的旧版本文件总占用空间: {deleted_size / (1024 * 1024):.2f} MB")
      else:
            print("未删除任何文件。")
    else:
      print("没有旧版本文件需要删除。")

if __name__ == "__main__":
    main()
    input("按 Enter 键退出...")






yhdsxyl 发表于 2024-10-6 17:52

感谢分享!给你点赞!好东西,拿走了,临走顶个贴感谢一下楼主!

囧骨古骨娄囧 发表于 2024-10-18 05:35

66666666666666666

wz5365821 发表于 2024-10-18 11:39

非常感谢分享

璇/aiq璇 发表于 2024-10-20 11:26

棒棒棒棒棒

czqczq000 发表于 2024-10-20 22:25

6666666666666666666

zama1987 发表于 2024-10-22 12:28

回复可见

3dm_31056518 发表于 2024-10-25 13:36

感谢分享111111

sxn4321 发表于 2024-10-25 15:35

666666666666666

liuliangwin 发表于 2024-10-25 23:18

fdgdsrgsdfshgdhfg

jshdl 发表于 2024-10-25 23:41

谢谢分享

332499644 发表于 2024-10-26 17:15



›mod去重工具›

8886769 发表于 2024-10-27 18:00

感谢分享 这个去重很厉害啊

wodaole 发表于 2024-10-27 23:28

执行mod去重.exe或mod去重.py后输入异星工厂mods文件夹路径,会打印旧版本信息,根据提示判断是否执行删除旧版本。

程志健 发表于 2024-10-29 20:57

楼主一生平安!好人一生平安!感谢分享!论坛因你更精彩!

494199631 发表于 2024-10-29 21:36

这就非常给力了!感谢分享!看到楼主这么努力分享,我只能顶个贴感谢一下了!

qwqw123456789 发表于 2024-10-29 23:39

感谢分享!论坛因你更精彩!下载试用一下,如果用着不错就给楼主顶贴!

fhht0216 发表于 2024-11-1 19:35

666666666

cat5000 发表于 2024-11-2 15:47

这就非常给力了!感谢分享!看到楼主这么努力分享,我只能顶个贴感谢一下了!

390297793 发表于 2024-11-9 22:06

6666666666666666666666

janova 发表于 2024-11-10 00:52

感谢分享!给你点赞!看到楼主这么努力分享,我只能顶个贴感谢一下了!

panhui1982124 发表于 2024-11-17 13:24

感谢楼主。

内中由内 发表于 2024-11-17 17:17

f492ffffffgdgfdgd

痕灭 发表于 2024-11-17 21:55

66666666666666

wisys 发表于 2024-11-19 21:46

重.exe或mod去重.py后输入异星工厂mods文件夹路径,会打印旧版本信息,根据提示判断是否执行删除旧

祖ke 发表于 2024-11-22 18:19

666666666666666666666

cdc0215 发表于 2024-12-2 15:26

看看隐藏内容是什么!谢谢!好东西,拿走了,临走顶个贴感谢一下楼主!

ms376723818 发表于 2024-12-23 12:29

感谢分享

大食熊 发表于 2024-12-23 21:57

先看看

nxrw007 发表于 2025-1-24 12:53

看起来不错的样子,谢谢分享!!!!!!!!
页: [1] 2
查看完整版本: mod去重工具