首页 > 解决方案 > 尝试重命名文件以删除连字符,找不到文件错误

问题描述

我正在查找包含连字符的文件(例如,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 ...”

标签: pythonpandasfile-rename

解决方案


如果不深入研究你的代码,看起来你有缩进问题。您的 try-except-finally 块可能应该缩进到该if file.startswith行下方。

另外,您可能应该检查new_fnnew_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")

推荐阅读