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

