使用shutil.move转移文件时如何保留源文件并覆盖目标同名文件
代码调整方案
核心修改逻辑
- 替换
shutil.move()为shutil.copy2():shutil.move为剪切操作,执行后源文件会被删除;shutil.copy2为复制操作,执行后源文件完整保留,且会保留文件创建时间、修改时间等元数据,**默认遇到目标路径同名文件时会直接覆盖,刚好匹配你的两个需求。 - 推荐使用
os.path.join()拼接路径,避免手动写斜杠导致的跨平台兼容问题、路径拼写错误。 - 新增目标文件夹自动创建逻辑,避免目标路径不存在时抛出异常。
调整后完整代码
import shutil import os # 你之前定义的source、quarter、clientInventory、folderName等全局变量无需修改 def placeFiles(): for a, p in zip(clientInventory, folderName): # 构造目标文件夹完整路径 target_dir = os.path.join(destination, str(p), f"{a} Performance") # 自动创建目标文件夹,已存在时不会报错 os.makedirs(target_dir, exist_ok=True) # 复制pdf文件,自动覆盖目标路径同名文件 source_pdf = os.path.join(source, quarter, f"{a}.pdf") shutil.copy2(source_pdf, target_dir) # 复制pptx文件,自动覆盖目标路径同名文件 source_pptx = os.path.join(source, quarter, f"{a}.pptx") shutil.copy2(source_pptx, target_dir)
可选优化(避免源文件不存在报错)
如果无法保证所有客户端ID对应的pdf/pptx文件都存在于源路径下,可以增加源文件存在性判断,避免抛出异常:
import shutil import os def placeFiles(): for a, p in zip(clientInventory, folderName): target_dir = os.path.join(destination, str(p), f"{a} Performance") os.makedirs(target_dir, exist_ok=True) source_pdf = os.path.join(source, quarter, f"{a}.pdf") if os.path.exists(source_pdf): shutil.copy2(source_pdf, target_dir) source_pptx = os.path.join(source, quarter, f"{a}.pptx") if os.path.exists(source_pptx): shutil.copy2(source_pptx, target_dir)
内容的提问来源于stack exchange,提问作者Eman9821
相关产品推荐
相关产品推荐

