update
This commit is contained in:
parent
7a0b8d5d29
commit
ba837ddccc
264
keilprojectClean/clean.py
Normal file
264
keilprojectClean/clean.py
Normal file
@ -0,0 +1,264 @@
|
||||
import os
|
||||
import sys
|
||||
import shutil
|
||||
import msvcrt
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
# 搜索根目录
|
||||
root_directory = "."
|
||||
|
||||
def print_blue(text):
|
||||
print("\x1b[34m" + text + "\x1b[0m")
|
||||
|
||||
def print_green(text):
|
||||
print("\x1b[32m" + text + "\x1b[0m")
|
||||
|
||||
def print_red(text):
|
||||
print("\x1b[31m" + text + "\x1b[0m")
|
||||
|
||||
|
||||
def build_delete_files_structure(root_dir, condition_value, condition_type="extension"):
|
||||
delete_files_structure = {}
|
||||
|
||||
# 获取目录下所有文件
|
||||
for root, _, files in os.walk(root_dir, topdown=False):
|
||||
delete_files = []
|
||||
|
||||
for file_name in files:
|
||||
file_path = os.path.join(root, file_name)
|
||||
|
||||
if condition_type == "contains" and condition_value in file_path:
|
||||
delete_files.append(file_path)
|
||||
elif condition_type == "equals" and condition_value == file_name:
|
||||
delete_files.append(file_path)
|
||||
elif condition_type == "extension" and file_name.endswith(condition_value):
|
||||
delete_files.append(file_path)
|
||||
|
||||
delete_files_structure[root] = delete_files
|
||||
|
||||
return delete_files_structure
|
||||
|
||||
|
||||
def build_delete_folders_structure(root_dir, condition_value, condition_type="contains"):
|
||||
delete_folders_structure = {}
|
||||
|
||||
# 获取目录下所有文件夹
|
||||
for root, dirs, _ in os.walk(root_dir, topdown=False):
|
||||
delete_folders = []
|
||||
|
||||
for folder_name in dirs:
|
||||
folder_path = os.path.join(root, folder_name)
|
||||
|
||||
if condition_type == "contains" and condition_value in folder_path:
|
||||
delete_folders.append(folder_path)
|
||||
elif condition_type == "equals" and condition_value == folder_name:
|
||||
delete_folders.append(folder_path)
|
||||
|
||||
delete_folders_structure[root] = delete_folders
|
||||
|
||||
return delete_folders_structure
|
||||
|
||||
|
||||
def delete_files(delete_structure):
|
||||
"""
|
||||
删除文件。
|
||||
|
||||
Parameters:
|
||||
delete_structure (dict): 删除文件的结构,键是根目录路径,值是要删除的文件列表。
|
||||
"""
|
||||
errors = [] # 记录删除文件时的异常信息
|
||||
for root, files in delete_structure.items():
|
||||
for file_path in files:
|
||||
try:
|
||||
os.remove(file_path)
|
||||
print(f"Deleted file: {file_path}")
|
||||
except PermissionError as e:
|
||||
errors.append(f"Permission error deleting {file_path}: {e}")
|
||||
except OSError as e:
|
||||
errors.append(f"Error deleting {file_path}: {e}")
|
||||
|
||||
return errors
|
||||
|
||||
def delete_folders(delete_structure):
|
||||
"""
|
||||
删除文件夹及其内容。
|
||||
|
||||
Parameters:
|
||||
delete_structure (dict): 删除文件夹的结构,键是根目录路径,值是要删除的文件夹列表。
|
||||
"""
|
||||
errors = [] # 记录删除文件夹时的异常信息
|
||||
for root, folders in delete_structure.items():
|
||||
for folder_path in folders:
|
||||
try:
|
||||
shutil.rmtree(folder_path)
|
||||
print(f"Deleted folder: {folder_path}")
|
||||
except PermissionError as e:
|
||||
errors.append(f"Permission error deleting folder {folder_path}: {e}")
|
||||
except OSError as e:
|
||||
errors.append(f"Error deleting folder {folder_path}: {e}")
|
||||
|
||||
return errors
|
||||
|
||||
|
||||
def delete_empty_folders(delete_structure):
|
||||
"""
|
||||
删除空文件夹。
|
||||
|
||||
Parameters:
|
||||
delete_structure (dict): 删除文件夹的结构,键是根目录路径,值是要删除的文件夹列表。
|
||||
"""
|
||||
errors = [] # 记录删除文件夹时的异常信息
|
||||
for root, folders in delete_structure.items():
|
||||
for folder_path in folders:
|
||||
if not os.listdir(folder_path):
|
||||
try:
|
||||
os.rmdir(folder_path)
|
||||
print(f"Deleted empty folder: {folder_path}")
|
||||
except PermissionError as e:
|
||||
print(f"Permission error deleting empty folder {folder_path}: {e}")
|
||||
except OSError as e:
|
||||
print(f"Error deleting empty folder {folder_path}: {e}")
|
||||
|
||||
|
||||
def find_and_rename_files(root_dir, find_file_suffix, replace_name_path, replace_suffix):
|
||||
finded_files = []
|
||||
errors = [] # 记录重命名文件时的异常信息
|
||||
for foldername, subfolders, filenames in os.walk(root_dir):
|
||||
for filename in filenames:
|
||||
if filename.endswith(find_file_suffix):
|
||||
file_path = os.path.join(foldername, filename)
|
||||
finded_files.append(file_path)
|
||||
for file_path in finded_files:
|
||||
try:
|
||||
# 获取上两级目录的名称
|
||||
upper_dirs = os.path.normpath(os.path.join(file_path, replace_name_path))
|
||||
upper_dirs = os.path.basename(upper_dirs)
|
||||
# 构建新的文件名
|
||||
new_filename = f"{upper_dirs}" + replace_suffix
|
||||
# 构建新的文件路径
|
||||
new_file_path = os.path.join(os.path.dirname(file_path), new_filename)
|
||||
# 检查新的文件名是否与当前文件名相同
|
||||
if new_filename != os.path.basename(file_path):
|
||||
# 重命名文件
|
||||
os.rename(file_path, new_file_path)
|
||||
print(f"Renamed: {file_path} to {new_file_path}")
|
||||
# else:
|
||||
# # print(f"Rename Skipping as same name: {file_path}")
|
||||
except PermissionError:
|
||||
errors.append(f"Permission error renaming file {file_path}: {e}")
|
||||
except FileNotFoundError:
|
||||
errors.append(f"error{file_path}: {e},file not found")
|
||||
except OSError as e:
|
||||
errors.append(f"Error renaming empty folder {file_path}: {e}")
|
||||
return errors
|
||||
|
||||
|
||||
def wait_for_any_key():
|
||||
print_green("ALL success and press any key to continue...")
|
||||
msvcrt.getch()
|
||||
|
||||
def sysExit_wait_for_any_key():
|
||||
print_red("Please check the error and press any key to exit...")
|
||||
msvcrt.getch()
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
|
||||
# 构建删除结构,指定要删除的文件后缀名(例如 ".txt")extension==后缀 contains==包含 equals==相等
|
||||
delete_structure_data_yaml = build_delete_files_structure(root_directory, "yml",condition_type="extension")
|
||||
delete_structure_data_ini = build_delete_files_structure(root_directory, "ini",condition_type="extension")
|
||||
delete_structure_data_txt = build_delete_files_structure(root_directory, "txt",condition_type="extension")
|
||||
delete_structure_data_json = build_delete_files_structure(root_directory, "json",condition_type="extension")
|
||||
delete_structure_data_scvd = build_delete_files_structure(root_directory, "scvd",condition_type="extension")
|
||||
delete_structure_data_clangd = build_delete_files_structure(root_directory, "clangd",condition_type="extension")
|
||||
delete_structure_data_uvguix = build_delete_files_structure(root_directory, "uvguix",condition_type="contains")
|
||||
#delete_structure_data_sct = build_delete_files_structure(root_directory, "sct",condition_type="extension")
|
||||
delete_structure_data_cfg = build_delete_files_structure(root_directory, "cfg",condition_type="extension")
|
||||
|
||||
|
||||
# 构建删除结构,指定要删除的文件夹名称 contains==包含 equals==相等
|
||||
delete_structure_DebugConfig = build_delete_folders_structure(root_directory,"DebugConfig",condition_type="equals")
|
||||
delete_structure_Listings = build_delete_folders_structure(root_directory,"Listings",condition_type="equals")
|
||||
delete_structure_Objects = build_delete_folders_structure(root_directory,"Objects",condition_type="equals")
|
||||
delete_structure_RTE = build_delete_folders_structure(root_directory,"RTE",condition_type="equals")
|
||||
delete_structure_output = build_delete_folders_structure(root_directory,"output",condition_type="equals")
|
||||
delete_structure_build = build_delete_folders_structure(root_directory,"build",condition_type="equals")
|
||||
|
||||
print_blue('\n')
|
||||
print_blue('******************************************************************************************')
|
||||
print_blue('********************************* begin to delete files **********************************')
|
||||
print_blue('******************************************************************************************')
|
||||
# 存储所有的文件操作异常信息
|
||||
all_file_errors = []
|
||||
# 调用多次删除文件函数,并汇总异常信息
|
||||
all_file_errors.extend(delete_files(delete_structure_data_yaml))
|
||||
all_file_errors.extend(delete_files(delete_structure_data_ini))
|
||||
all_file_errors.extend(delete_files(delete_structure_data_txt))
|
||||
all_file_errors.extend(delete_files(delete_structure_data_json))
|
||||
all_file_errors.extend(delete_files(delete_structure_data_scvd))
|
||||
all_file_errors.extend(delete_files(delete_structure_data_clangd))
|
||||
all_file_errors.extend(delete_files(delete_structure_data_uvguix))
|
||||
#all_file_errors.extend(delete_files(delete_structure_data_sct))
|
||||
all_file_errors.extend(delete_files(delete_structure_data_cfg))
|
||||
|
||||
|
||||
|
||||
print_blue('\n')
|
||||
print_blue('******************************************************************************************')
|
||||
print_blue('******************************** begin to delete folders *********************************')
|
||||
print_blue('******************************************************************************************')
|
||||
# 存储所有的文件操作异常信息
|
||||
all_folders_errors = []
|
||||
# 调用多次删除文件函数,并汇总异常信息
|
||||
all_folders_errors.extend(delete_folders(delete_structure_DebugConfig))
|
||||
all_folders_errors.extend(delete_folders(delete_structure_Listings))
|
||||
all_folders_errors.extend(delete_folders(delete_structure_Objects))
|
||||
all_folders_errors.extend(delete_folders(delete_structure_RTE))
|
||||
all_folders_errors.extend(delete_folders(delete_structure_output))
|
||||
all_folders_errors.extend(delete_folders(delete_structure_build))
|
||||
|
||||
|
||||
print_blue('\n')
|
||||
print_blue('******************************************************************************************')
|
||||
print_blue('********************************* begin to rename files **********************************')
|
||||
print_blue('******************************************************************************************')
|
||||
# 存储所有的文件操作异常信息
|
||||
all_find_and_rename_errors = []
|
||||
all_find_and_rename_errors.extend(find_and_rename_files(".",".uvprojx","../..",".uvprojx"))
|
||||
all_find_and_rename_errors.extend(find_and_rename_files(".",".uvoptx","../..",".uvoptx"))
|
||||
|
||||
print('\r\n')
|
||||
print_red('******************************************************************************************')
|
||||
print_red('************************************* Errors summary *************************************')
|
||||
print_red('******************************************************************************************')
|
||||
|
||||
|
||||
# 输出删除文件时的异常信息
|
||||
error_count = 1
|
||||
for error in all_file_errors:
|
||||
print_red(f"{error_count}. {error}")
|
||||
error_count += 1
|
||||
|
||||
# 输出删除文件夹时的异常信息
|
||||
error_count = 1
|
||||
for error in all_folders_errors:
|
||||
print_red(f"{error_count}. {error}")
|
||||
error_count += 1
|
||||
|
||||
|
||||
# 输出删除文件夹时的异常信息
|
||||
error_count = 1
|
||||
for error in all_find_and_rename_errors:
|
||||
print_red(f"{error_count}. {error}")
|
||||
error_count += 1
|
||||
|
||||
print('\r\n')
|
||||
# 检查是否有异常信息,等待用户确认
|
||||
if all_file_errors or all_folders_errors or all_find_and_rename_errors:
|
||||
sysExit_wait_for_any_key()
|
||||
else:
|
||||
print_green('No errors')
|
||||
|
||||
print('\r\n')
|
||||
# 在控制台等待用户按下任意键
|
||||
wait_for_any_key()
|
Loading…
Reference in New Issue
Block a user