如何使用pandas to_csv写入不编码文件名的文件?解决路径转义问题
解决文件名URL编码(空格变%20)的问题
看起来你遇到的问题是文件名里的空格被自动转成了%20,没法保留原有的my file.csv格式。这通常是因为从响应中提取文件名时没处理URL编码,或者路径拼接的方式不对。下面是具体的解决步骤:
1. 修复文件名提取的钩子函数
首先检查你的addFilenameToResponse钩子——文件名是在这里附加到响应对象的,大概率是这里没对URL编码的文件名做解码。用urllib.parse.unquote可以把编码后的字符还原成原格式:
import urllib.parse def addFilenameToResponse(response, *args, **kwargs): # 从Content-Disposition响应头提取文件名(根据实际格式调整逻辑) content_disposition = response.headers.get('Content-Disposition') if content_disposition: # 提取filename字段,去掉引号 raw_filename = content_disposition.split('filename=')[1].strip('"') # 解码URL编码的字符(比如把%20转回空格) response.filename = urllib.parse.unquote(raw_filename)
如果你的文件名是从URL里提取的(比如取URL的最后一段),同样要解码:
from urllib.parse import unquote import os # 示例:从请求URL提取文件名 filename_from_url = unquote(os.path.basename(u)) response.filename = filename_from_url
2. 安全拼接输出路径
别直接用字符串相加拼接路径,改用os.path.join——它会自动处理路径分隔符,还能兼容带空格/特殊字符的文件名:
import os import io import pandas as pd # 遍历结果保存文件 for res in sp_results: byteStream = io.BytesIO(res.content) result_df = pd.read_csv(byteStream, sep=",", encoding='utf8') # 用os.path.join拼接目录和文件名 output_path = os.path.join(downloads_folder, res.filename) # 保存CSV,确保文件名正确 result_df.to_csv(output_path, index=False, encoding='utf8')
这样处理后,文件名里的空格就能保留成my file.csv,不会再变成my%20file.csv了。
内容的提问来源于stack exchange,提问作者user3871
相关产品推荐
相关产品推荐

