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

如何用Python的shutil.copy()和os.rename()覆盖不同文件夹中的文件

解决os.rename()无法覆盖文件的WinError183问题

Windows系统下os.rename()不允许直接覆盖已存在的目标文件,这是触发FileExistsError: [WinError 183]的核心原因。针对你需要生成固定文件名供PowerBI读取的需求,提供两种可行解决办法:

方法1:先删除目标文件再重命名

先检查目标文件是否存在,若存在则删除,再执行重命名操作,确保新文件能正常替换旧文件:

import os
import shutil
from datetime import date

# 原有代码保持不变
src_file = vb.output_path
destination = vb.path_reports_cashflowcopy
shutil.copy(src_file, destination)
cashflow_copy_path = vb.ROOT_DIR + '\\Data_and_Reports\\Reports\\Cashflow Copies\\'

# 定义原文件名和目标文件名
old_name = cashflow_copy_path + str(date.today()) + ' -  Lettings Report BETA - ' + vb.academic_year_selection + '.xlsx'
new_name = cashflow_copy_path + 'Copy ' + vb.academic_year_selection + '.xlsx'

# 检查目标文件是否存在,存在则删除
if os.path.exists(new_name):
    os.remove(new_name)

# 执行重命名
os.rename(old_name, new_name)

方法2:使用shutil.move()替代os.rename()

shutil.move()在Windows环境下支持直接覆盖已存在的目标文件,代码更简洁:

import shutil
from datetime import date

# 原有代码保持不变
src_file = vb.output_path
destination = vb.path_reports_cashflowcopy
shutil.copy(src_file, destination)
cashflow_copy_path = vb.ROOT_DIR + '\\Data_and_Reports\\Reports\\Cashflow Copies\\'

# 定义原文件名和目标文件名
old_name = cashflow_copy_path + str(date.today()) + ' -  Lettings Report BETA - ' + vb.academic_year_selection + '.xlsx'
new_name = cashflow_copy_path + 'Copy ' + vb.academic_year_selection + '.xlsx'

# 用shutil.move替代os.rename,自动覆盖目标文件
shutil.move(old_name, new_name)

注意事项

  • 执行删除或覆盖操作前,确保目标文件没有被其他程序(比如PowerBI)占用,否则会触发权限错误。
  • 若需要保留历史版本,可以在替换前先将旧文件备份到其他目录。

内容的提问来源于stack exchange,提问作者Tom Owen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:53:13