尝试重命名文件以删除连字符,找不到文件错误
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")
我正在查找一个包含连字符的文件(例如,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")