You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:27:02