Python批量清理Excel空行报错:文件存在却提示找不到
问题
我尝试运行一段Python代码,遍历指定文件夹中的Excel文件并删除空行,但运行时出现错误:循环中的当前文件明明能被打印出来,加载时却提示找不到。错误信息显示程序在脚本所在目录而非指定目标文件夹中查找文件。附上代码及报错信息:
import os from spire.xls import * from spire.common import * # 需要处理的目录: path = 'C:/Users/paulina.rios/Desktop/Teacher Sheets - Copy (2) - Copy/' # 创建包含目录文件名的列表 list = os.listdir(path) # 遍历目录中的每个文件 for file in list: print(file) # 指定输入和输出文件路径 inputFile = file outputFile = "Edited.xlsx" # 创建Workbook实例 workbook = Workbook() # 加载Excel文件 workbook.LoadFromFile(inputFile) # 获取第一个工作表 sheet = workbook.Worksheets[0] # 从工作表中删除空行 for i in range(sheet.Rows.Length - 1, -1, -1): if sheet.Rows[i].IsBlank: sheet.DeleteRow(i + 1) # 保存结果文件 workbook.SaveToFile(outputFile, ExcelVersion.Version2013) workbook.Dispose()
报错信息:
C:\Users\paulina.rios\PycharmProjects\python Project\venv\Scripts\python.exe "C:\Users\paulina.rios\AppData\Roaming\JetBrains\PyCharmCE2023.1\scratches\this one.py" 10175.xlsx Traceback (most recent call last): File "C:\Users\paulina.rios\AppData\Roaming\JetBrains\PyCharmCE2023.1\scratches\this one.py", line 24, in <module> workbook.LoadFromFile(inputFile) File "C:\Users\paulina.rios\PycharmProjects\python Project\venv\lib\site-packages\plum\function.py", line 642, in __call__ return self.f(self.instance, *args, **kw_args) File "C:\Users\paulina.rios\PycharmProjects\python Project\venv\lib\site-packages\plum\function.py", line 592, in __call__ return _convert (method (*args, **kw_args), return_type) File "C:\Users\paulina.rios\PycharmProjects\pythonProject\venv\lib\site-packages\spire\xls\Workbook.py", line 602, in LoadFromFile raise ArgumentError(intPtr.typeName) ctypes.ArgumentError: IO_FileNotFound_FileName, C:\Users\paulina.rios\AppData\Roaming\JetBrains\PyCharmCE2023.1\scratches\10175.xlsx Process finished with exit code 1
解决方法
问题根源
os.listdir(path) 返回的只是文件夹内的纯文件名,不是完整路径。直接用该文件名加载文件时,Python会默认在当前脚本的运行目录下查找,而非你指定的目标文件夹,因此出现文件找不到的错误。
修改后的代码
使用os.path.join()将目标文件夹路径与文件名拼接成完整路径,同时优化输出文件名避免重名覆盖:
import os from spire.xls import * from spire.common import * # 需要处理的目录 target_path = 'C:/Users/paulina.rios/Desktop/Teacher Sheets - Copy (2) - Copy/' # 遍历目录中的每个文件 for filename in os.listdir(target_path): # 仅处理xlsx格式文件,过滤非Excel文件 if not filename.endswith('.xlsx'): continue print(filename) # 拼接完整的输入文件路径 input_file = os.path.join(target_path, filename) # 生成不重复的输出文件名(原文件名前加前缀) output_file = f"Edited_{filename}" # 创建Workbook实例 workbook = Workbook() # 加载Excel文件(使用完整路径) workbook.LoadFromFile(input_file) # 获取第一个工作表 sheet = workbook.Worksheets[0] # 从工作表中删除空行 for i in range(sheet.Rows.Length - 1, -1, -1): if sheet.Rows[i].IsBlank: sheet.DeleteRow(i + 1) # 保存结果文件 workbook.SaveToFile(output_file, ExcelVersion.Version2013) workbook.Dispose()
额外优化说明
- 增加文件后缀判断,避免遍历到非Excel文件引发错误
- 修改输出文件名规则,防止多文件处理时被同名文件覆盖
- 变量名更规范(如避免使用
list这类内置函数名作为变量名)
内容的提问来源于stack exchange,提问作者hershey10
相关产品推荐
相关产品推荐

