超级玩家
 
- 贡献度
- 81
- 金元
- 6279
- 积分
- 952
- 精华
- 0
- 注册时间
- 2015-10-3
|
执行mod去重.exe或mod去重.py后输入异星工厂mods文件夹路径,会打印旧版本信息,根据提示判断是否执行删除旧版本。
exe与py文件:
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 = [f for f in os.listdir(path) if f.endswith(".zip")]
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: [versions]} 的字典,并按版本号排序
"""
file_dict = defaultdict(list)
for file in files:
name, version = extract_version(file)
if name and version:
file_dict[name].append((file, version))
# 按版本号排序,假设版本号是语义化版本
for name in file_dict:
file_dict[name].sort(key=lambda x: list(map(int, x[1].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][0]}")
else:
print(f"{name}: {versions[0][0]} (只有一个版本)")
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 键退出...")
|
评分
-
1
查看全部评分
-
|