video_translation/core/utils/onekeycleanup.py

82 lines
2.8 KiB
Python
Raw Normal View History

2025-08-20 11:39:34 +08:00
import os
import glob
import shutil
def cleanup(history_dir="history"):
2025-09-05 14:41:59 +08:00
# Get video file name - 重构后从output目录查找
video_files = [f for f in os.listdir('output') if f.endswith(('.mp4', '.avi', '.mov', '.mkv'))]
if video_files:
video_file = video_files[0]
video_name = os.path.splitext(video_file)[0]
video_name = sanitize_filename(video_name)
else:
video_name = "unknown_video" # 默认名称
2025-08-20 11:39:34 +08:00
# Create required folders
os.makedirs(history_dir, exist_ok=True)
video_history_dir = os.path.join(history_dir, video_name)
log_dir = os.path.join(video_history_dir, "log")
gpt_log_dir = os.path.join(video_history_dir, "gpt_log")
os.makedirs(log_dir, exist_ok=True)
os.makedirs(gpt_log_dir, exist_ok=True)
# Move non-log files
for file in glob.glob("output/*"):
if not file.endswith(('log', 'gpt_log')):
move_file(file, video_history_dir)
# Move log files
for file in glob.glob("output/log/*"):
move_file(file, log_dir)
# Move gpt_log files
for file in glob.glob("output/gpt_log/*"):
move_file(file, gpt_log_dir)
# Delete empty output directories
try:
os.rmdir("output/log")
os.rmdir("output/gpt_log")
os.rmdir("output")
except OSError:
pass # Ignore errors when deleting directories
def move_file(src, dst):
try:
# Get the source file name
src_filename = os.path.basename(src)
# Use os.path.join to ensure correct path and include file name
dst = os.path.join(dst, sanitize_filename(src_filename))
if os.path.exists(dst):
if os.path.isdir(dst):
# If destination is a folder, try to delete its contents
shutil.rmtree(dst, ignore_errors=True)
else:
# If destination is a file, try to delete it
os.remove(dst)
shutil.move(src, dst, copy_function=shutil.copy2)
print(f"✅ Moved: {src} -> {dst}")
except PermissionError:
print(f"⚠️ Permission error: Cannot delete {dst}, attempting to overwrite")
try:
shutil.copy2(src, dst)
os.remove(src)
print(f"✅ Copied and deleted source file: {src} -> {dst}")
except Exception as e:
print(f"❌ Move failed: {src} -> {dst}")
print(f"Error message: {str(e)}")
except Exception as e:
print(f"❌ Move failed: {src} -> {dst}")
print(f"Error message: {str(e)}")
def sanitize_filename(filename):
# Remove or replace disallowed characters
invalid_chars = '<>:"/\\|?*'
for char in invalid_chars:
filename = filename.replace(char, '_')
return filename
if __name__ == "__main__":
cleanup()