使用shutil.move移动文件丢失扩展名致文件不可用的问题求助
解决文件移动后丢失扩展名的问题
问题根源
问题出在append_timestamp(name)函数对文件名的处理逻辑上——如果直接给包含扩展名的完整文件名追加时间戳,很可能错误地破坏了扩展名结构,比如把时间戳加在扩展名之后,或是拆分文件名时丢失了扩展名部分。
修复方案
我们需要先拆分文件名主体和扩展名,仅给文件名部分添加时间戳,再重新拼接扩展名:
- 修复
append_timestamp函数
import datetime import os def append_timestamp(filename): # 拆分文件名主体与扩展名 name, ext = os.path.splitext(filename) # 生成自定义格式的时间戳(可根据需求调整格式) timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") # 重新拼接:文件名_时间戳.扩展名 return f"{name}_{timestamp}{ext}"
- 优化
safe_copy函数(可选,简化文件夹创建逻辑)
import os import shutil def safe_copy(self, src, out_dir): # 添加exist_ok=True,避免文件夹已存在时抛出异常 os.makedirs(out_dir, exist_ok=True) name = os.path.basename(src) shutil.move(src, os.path.join(out_dir, append_timestamp(name)))
额外注意事项
- 时间戳格式可按需调整,比如
%Y-%m-%d_%H-%M-%S更易读,但要注意部分系统不允许文件名包含:符号; - 若原文件没有扩展名(比如示例中的
filename),上述逻辑也会保留无扩展名的状态,不会额外添加。
内容的提问来源于stack exchange,提问作者Pechiyappan Raj
相关产品推荐
相关产品推荐

