编辑
2023-12-19
折腾
00
请注意,本文编写于 132 天前,最后修改于 25 天前,其中某些信息可能已经过时。

目录

场景重现
解决思路及大致缘由

引言

在给同事写一个处理excel表格脚本的过程中,发现在某些情况下,vscode终端会给拖入进去的表格文件路径前添加一个"& ",导致Python的openpyxl模块读取excel表格失败;网上关于这个问题讨论基本没有,所以记录下来。

场景重现

  1. 表格名称中包含空格,目前仅知道这种情况下会有这个问题,例如新建一个名为"test .xlsx"的文件
  2. 使用以下代码,并将文件直接拖入终端
Python
import openpyxl file = input("请输入文件路径:") with openpyxl.load_workbook(file) as workbook: # 选择要操作的工作表 worksheet = workbook["Sheet1"] # 读取第一行数据 first_row = worksheet.iter_rows(min_row=1, max_row=1, values_only=True) # 遍历第一行数据 for cell in first_row: print(cell)
  1. 拖入文件后会发现,终端中显示的路径如下
    & 'c:\Users\dy002\Desktop\test .xlsx'
  2. enter运行代码会报错,报错信息如下
    openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support .xlsx' file format, please check you can open it with Excel first. Supported formats are: .xlsx,.xlsm,.xltx,.xltm
    看起来是说文件格式问题,但其实不是,因为文件就是xlsx,应该是受支持的格式

解决思路及大致缘由

不在vscode的终端中拖入文件,发现文件中仅会多一个引号,查询后得知:空格在命令行中通常用作参数的分隔符,引号的作用是将包含空格的文件路径作为单个参数传递给命令行。这种行为可能因操作系统和终端环境而异。不同的操作系统和终端可能会以不同的方式处理文件路径中的空格。

而上面报错正是因为vscode终端对空格的处理,就是除了添加引号外,还在前面添加了"& ",导致程序读取文件路径失败,要解决这个问题就需要去除多余的引号及"& "。

网上搜索到一个解释也印证了我的猜想

image.png

本文作者:狄云

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!