读取GitHub上GeoJSON文件触发OSError[Errno22]的技术求助
解决GitHub远程GeoJSON读取报错的问题
问题根源
open()函数是专门用来读取本地文件系统内文件的工具,它完全不支持HTTP/HTTPS这类远程链接格式。你把GitHub的原始文件URL传给它,它会把这个链接当成无效的本地文件路径,自然就抛出OSError: [Errno 22] Invalid argument错误了。
正确解决思路
要读取远程的GeoJSON文件,得先通过HTTP请求把文件内容下载到本地内存,再用json模块解析。最简洁易用的方式是借助requests库,步骤如下:
- 先确保你安装了
requests(没装的话执行pip install requests) - 用
requests.get()发起请求获取文件内容 - 用
json.loads()解析返回的文本内容
替换后的代码示例
import json import requests base_url = 'https://raw.githubusercontent.com/otteheng/Teacher-Quality-Gaps-Dash/master/' year = '1988' binz = 'experience_gap_bins_0.102-0.805' full_url = f"{base_url}{year}/{binz}.geojson" # 发送请求获取远程文件内容 response = requests.get(full_url) # 检查请求是否成功(比如404、500这类错误会直接抛出异常) response.raise_for_status() # 解析JSON格式内容 geo = json.loads(response.text)
备选方案(用Python标准库)
如果不想额外安装第三方库,也可以用标准库的urllib.request实现:
import json from urllib.request import urlopen full_url = f"{base_url}{year}/{binz}.geojson" with urlopen(full_url) as response: geo = json.load(response)
小提示
记得在代码里加入异常处理逻辑,比如捕获网络超时、链接无效这类情况,避免程序因为突发网络问题直接崩溃。
内容的提问来源于stack exchange,提问作者otteheng
相关产品推荐
相关产品推荐

