如何用Python读取/下载URL中未知全名的CSV文件
解决远程CSV文件的读取/下载问题(未知全名)
错误原因
glob(包括glob2)仅能处理本地文件系统路径,无法解析远程HTTP/HTTPS URL的文件列表。你用它匹配远程路径时,返回的是空列表,取[0]自然会触发IndexError: list index out of range。
解决方案:先获取目标文件的完整URL
目标服务器目录下仅有CSV文件,且命名格式固定为Data_Feed_YYYYMMDD_xxxx_EST.csv,我们可以先爬取目录页面内容,筛选出符合日期的文件,再进行读取或下载。
方案1:直接读取远程CSV文件
import pandas as pd import requests import re date = "20230525" base_url = "https://internalurl.net/Data/" # 获取目录页面内容 response = requests.get(base_url) response.raise_for_status() # 请求失败直接抛出错误 # 正则匹配符合格式的文件名 pattern = rf"Data_Feed_{date}_\d+_EST\.csv" match = re.search(pattern, response.text) if match: target_file = match.group() full_url = base_url + target_file # 直接读取CSV内容 data = pd.read_csv(full_url, header=0, skip_blank_lines=False) print(data) else: print(f"未找到日期为{date}的CSV文件")
方案2:下载远程CSV文件到本地
import requests import re date = "20230525" base_url = "https://internalurl.net/Data/" save_path = "./target_data.csv" response = requests.get(base_url) response.raise_for_status() # 正则匹配目标文件名 pattern = rf"Data_Feed_{date}_\d+_EST\.csv" match = re.search(pattern, response.text) if match: target_file = match.group() full_url = base_url + target_file # 下载文件 file_response = requests.get(full_url) file_response.raise_for_status() with open(save_path, "wb") as f: f.write(file_response.content) print(f"文件已保存至:{save_path}") else: print(f"未找到日期为{date}的CSV文件")
补充说明
- 如果服务器返回的文件列表不是标准HTML(比如JSON格式),只需调整解析逻辑,核心思路仍是获取文件名→拼接完整URL→操作文件。
- 若服务器需要身份验证,在
requests.get中添加auth参数即可,例如auth=("你的用户名", "你的密码")。
内容的提问来源于stack exchange,提问作者sb92
相关产品推荐
相关产品推荐

