狄云的所思所想

产品、技术想到哪写到哪

记录一个关于vscode终端的“问题”

2023-12-19

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

场景重现

  1. 表格名称中包含空格,目前仅知道这种情况下会有这个问题,例如新建一个名为"test .xlsx"的文件
  2. 使用以下代码,并将文件直接拖入终端
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