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

Python移除文件名横杠后调用win32com打开报错找不到文件求助

问题根因定位
  • 错误使用os.rename()的返回值:os.rename()执行重命名操作后无返回值(返回None),你将赋值为os.rename()结果的new_1传给Workbooks.Open(),相当于传入空值,自然无法找到文件,正确的传参应该是你自己定义的新文件名变量new_fn。
  • 代码缩进逻辑错误:重命名逻辑在if file.startswith(in_file)的分支内,但后续的文件打开、格式转换、数据读取逻辑直接写在for循环下,没有放在if分支内:
    1. 遍历到不匹配前缀的文件时,new_fn/new_1变量未定义,会直接触发报错
    2. 即使存在匹配文件,遍历下一个不匹配文件时,会重复执行转换逻辑,复用的还是上一个匹配文件的变量值,逻辑完全混乱
  • 缺少匹配命中后的跳出逻辑:如果目录下存在多个匹配前缀的文件,后续重命名、转换操作会覆盖之前的结果,不符合单个文件处理的预期。
修复后可运行代码
import os
import win32com.client
import pandas as pd

in_file = input('Enter filename to use:')
target_new_fn = None

for file in os.listdir():
    if file.startswith(in_file):
        target_new_fn = file.replace('-','')
        os.rename(file, target_new_fn)
        # 匹配到目标文件后跳出循环,避免其他文件干扰
        break

# 未找到匹配文件直接终止运行
if not target_new_fn:
    print(f"未找到前缀为 {in_file}的文件")
    exit()

try:
    xlApp = win32com.client.Dispatch("Excel.Application")
    # 传入绝对路径避免Excel默认工作目录和Python工作目录不一致
    xlWbk = xlApp.Workbooks.Open(os.path.abspath(target_new_fn))
    xlWbk.SaveAs(r"hours_conv.xlsx", 51)

    xlWbk.Close(True)
    xlApp.Quit()

except Exception as e:
    print(e)

finally:
    xlWbk = None
    xlApp = None
    del xlWbk, xlApp

output_df = pd.read_excel(r"hours_conv.xlsx", skiprows = 3)
print(output_df)
额外注意事项
  • 运行代码前可以先打印os.getcwd()确认Python当前工作目录,和你存放目标XML文件的目录是否一致
  • 如果需要批量处理多个匹配前缀的文件,建议给每个转换后的Xlsx文件设置独立文件名,避免覆盖
  • 转换完成后如果需要保留原文件,可以加逻辑把重命名后的文件改回原名,或者复制文件后再修改副本的名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:05