尝试重命名文件以删除连字符,找不到文件错误

Trying to rename files to remove hyphens, file cannot be found error

我正在查找一个包含连字符的文件(例如,Hours-2021.xml)。当我执行字符替换时,我收到找不到文件的错误消息。如果我只是使用不带连字符的电影名,它会按预期工作。我在另一个线程上找到了重新格式化文件名的解决方案,但它似乎不起作用。很可能这是一个简单的修复方法,但我却没有。这是我的代码示例...

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 行下方。

此外,您应该在执行 os.rename() 之前检查 new_fn 是否与 new_1 不同。或者您可以使调用有条件,例如更改:

if file.startswith(in_file):

至:

if file.startswith(in_file) and '-' in file:

或类似的东西。

此外,os.rename() 没有 return 值。所以 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")