如何将shutil复制的目标文件路径存入变量并实现文件重命名?
解决方案
以下是修正后的代码,解决了路径处理、扩展名保留及文件夹存在性检查等问题:
import os import shutil import random import tkinter as tk from tkinter import filedialog, messagebox def loadVideo(): global filePath filePath = filedialog.askopenfilename() # 获取原文件路径 # 确保目标文件夹存在,不存在则自动创建 target_folder = "video store" if not os.path.exists(target_folder): os.makedirs(target_folder) # 生成随机ID并保留原文件扩展名 random_id = str(random.randint(1, 1000000)) original_filename = os.path.basename(filePath) file_ext = os.path.splitext(original_filename)[1] new_filename = f"{random_id}{file_ext}" # 复制原文件到目标文件夹 copied_file_path = os.path.join(target_folder, original_filename) shutil.copy(filePath, copied_file_path) # 重命名复制后的文件 new_file_path = os.path.join(target_folder, new_filename) os.rename(copied_file_path, new_file_path) messagebox.showinfo("", "Upload successful!")
关键改动说明:
- 路径安全处理:用
os.path.join()拼接路径,自动适配不同操作系统的路径分隔符,避免硬写/或\导致的跨平台问题 - 获取文件名:通过
os.path.basename(filePath)直接提取原文件名,无需手动猜测路径 - 保留文件扩展名:用
os.path.splitext()拆分文件名和扩展名,重命名后不会丢失视频格式信息 - 文件夹存在性检查:添加
os.makedirs()确保目标文件夹存在,防止复制操作因文件夹不存在报错 - 路径完整性:重命名时传入完整目标路径,确保文件在
video store文件夹内完成重命名,而非当前工作目录
可选优化(更可靠的随机ID):
如果担心randint生成的ID重复,可以改用uuid模块生成全局唯一ID:
import uuid random_id = str(uuid.uuid4()) # 生成完全唯一的字符串ID
内容的提问来源于stack exchange,提问作者Ivan McKenna
相关产品推荐
相关产品推荐

