You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用requests下载GTFS数据后如何提取内部txt文件

GTFS数据下载与提取实现方案

你请求到的返回内容是标准的ZIP格式压缩包,GTFS公开数据集普遍以zip格式打包分发,里面包含stops.txt、routes.txt等子文件。你当前的代码只是直接将压缩包的二进制内容写入了无后缀文件,没有经过解压步骤,因此无法直接访问内部的子文件。


所需依赖

仅需Python标准库即可实现,无需额外安装第三方包:

  • zipfile:用于解压/解析ZIP格式文件
  • os:用于本地目录创建校验
  • io(可选):用于内存流处理,无需先存zip文件到本地

具体实现代码

方案1:先保存压缩包到本地,再解压提取所有文件

适合需要留存原始GTFS压缩包的场景:

import requests
import zipfile
import os

def download_gtfs(url):
    # 提前定义存储路径、创建目录避免运行报错
    zip_save_path = "prov/city/gtfs_raw.zip"
    extract_dir = "prov/city/GTFS"
    os.makedirs(extract_dir, exist_ok=True)
    
    r = requests.get(url, timeout=30)
    if r.ok:
        # 先保存压缩包到本地
        with open(zip_save_path, "wb") as f:
            f.write(r.content)
        print("压缩包下载完成,开始解压")
        # 解压所有文件到指定目录
        with zipfile.ZipFile(zip_save_path, "r") as zip_ref:
            zip_ref.extractall(extract_dir)
        print(f"所有文件已解压到{extract_dir},可直接访问该目录下的stops.txt等文件")
    else:
        print(f"下载失败,状态码:{r.status_code}")

# 调用示例
download_gtfs("https://transitfeeds.com/p/agence-metropolitaine-de-transport/129/latest/download")

方案2:内存直接解析压缩包,无需保存原始zip文件

适合不需要留存原始压缩包,仅需提取子文件的场景,节省存储空间:

import requests
import zipfile
import io
import os

def download_gtfs(url):
    extract_dir = "prov/city/GTFS"
    os.makedirs(extract_dir, exist_ok=True)
    
    r = requests.get(url, timeout=30)
    if r.ok:
        print("下载完成,开始解析压缩包")
        # 直接用BytesIO把返回内容转成可被zipfile读取的流对象
        with zipfile.ZipFile(io.BytesIO(r.content)) as zip_ref:
            # 可以选择直接全部解压到本地
            zip_ref.extractall(extract_dir)
            # 也可以只读取特定文件内容,无需存本地直接操作
            # with zip_ref.open("stops.txt") as f:
            #     stops_content = f.read()
            #     # 直接对stops_content做数据处理
        print(f"文件提取完成,存储目录:{extract_dir}")
    else:
        print(f"下载失败,状态码:{r.status_code}")

后续操作

解压完成后你可以直接在指定的extract_dir目录下找到所有GTFS标准文件,用普通文件读写操作即可读取stops.txt等内容做后续处理。

内容的提问来源于stack exchange,提问作者k3t0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:57:02