python - 尝试重命名文件以删除连字符,找不到文件错误
问题描述
我正在查找包含连字符的文件(例如,Hours-2021.xml)。当我执行字符替换时,我收到一个错误,即找不到该文件。如果我只是使用没有连字符的 filname,它会按预期工作。我在另一个线程上找到了重新格式化文件名的解决方案,但它似乎不起作用。很可能这是一个让我无法解决的简单修复。这是我的代码示例...
import os
import os.path
import win32com.client
import pandas as pd
in_file = input('Enter filename to use:')
for file in os.listdir():
if file.startswith(in_file):
new_fn=file.replace('-','')
new_1 = os.rename(file, new_fn)
try:
xlApp = win32com.client.Dispatch("Excel.Application")
xlWbk = xlApp.Workbooks.Open(new_1)
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; del xlApp
# READ EXCEL FILE
output_df = pd.read_excel(r"hours_conv.xlsx", skiprows = 3)
print(output_df)
尝试之前的一切:我可以获得我期望的输出(例如,Hours2021)。然后进一步我得到错误,在这种情况下“”对不起,我们找不到 Hours2021.xml ...”
解决方案
如果不深入研究你的代码,看起来你有缩进问题。您的 try-except-finally 块可能应该缩进到该if file.startswith
行下方。
另外,您可能应该检查new_fn
与new_1
执行 os.rename() 之前的情况不同。或者,您可以使调用有条件,例如更改:
if file.startswith(in_file):
到:
if file.startswith(in_file) and '-' in file:
或类似的规定。
此外, os.rename() 不返回值。所以new_1
设置为None
.
最后,请记住,每次运行程序时,它都会重命名文件。因此,您可能必须在每次运行之前将它们重命名。
另外,请记住您的:
xlWbk = xlApp.Workbooks.Open(new_1)
可能总是会失败,因为 new_1 是 None。
假设我了解您要执行的操作,这是您的代码的工作版本。除了上述注释之外,它还解决了路径问题,因为 Excel 想知道要使用的文档的完整路径。工作代码如下:
import os.path
import win32com.client
import pandas as pd
cwd = os.getcwd()
print(f"{cwd=}")
out_filename = "hours_conv.xlsx"
in_file = input('Enter filename (starting string) to use: ')
for file in os.listdir():
if file.startswith(in_file):
new_fn = file.replace('-','')
if new_fn != file:
os.rename(file, new_fn)
# indent
try:
xlApp = win32com.client.Dispatch("Excel.Application")
xlWbk = xlApp.Workbooks.Open(f"{cwd}/{new_fn}") # mod to be new_fn
xlWbk.SaveAs(f"{cwd}/{out_filename}", 51)
xlWbk.Close(True)
xlApp.Quit()
except Exception as e:
print(e)
finally:
xlWbk = xlApp = None
del xlWbk; del xlApp
# READ EXCEL FILE
if os.path.exists(f"{cwd}/{out_filename}"):
output_df = pd.read_excel(f"{cwd}/{out_filename}", skiprows = 3)
print(output_df)
else:
print(f"Output file {cwd}/{out_filename} Not Found")