记录一个关于vscode终端的“问题”
2023-12-19
在给同事写一个处理excel表格脚本的过程中,发现在某些情况下,vscode终端会给拖入进去的表格文件路径前添加一个"& ",导致Python的openpyxl模块读取excel表格失败;网上关于这个问题讨论基本没有,所以记录下来。
场景重现
- 表格名称中包含空格,目前仅知道这种情况下会有这个问题,例如新建一个名为"test .xlsx"的文件
- 使用以下代码,并将文件直接拖入终端
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)
- 拖入文件后会发现,终端中显示的路径如下
& 'c:\Users\dy002\Desktop\test .xlsx'
- 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终端对空格的处理,就是除了添加引号外,还在前面添加了"& ",导致程序读取文件路径失败,要解决这个问题就需要去除多余的引号及"& "。
网上搜索到一个解释也印证了我的猜想