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

构建Nasdaq ITCH订单簿时解压.gz文件触发EOFError报错如何解决

问题原因分析
  • 报错EOFError: Compressed file ended before the end-of-stream marker was reached的本质是你使用的03272019.NASDAQ_ITCH50.gz压缩文件不完整,文件尾部的gzip校验标识缺失,不属于代码逻辑错误。
  • 触发该问题的常见场景:纳斯达克FTP站点对匿名访客的下载存在限速、连接超时限制,下载过程中网络波动导致传输中断,最终得到的文件是未传输完成的残缺文件,所以系统自带解压工具、gzip命令都无法正常读取。
  • 额外排查点:如果教程中定义的SOURCE_FILE参数值和你手动下载的文件名不一致,may_be_download函数会检测到目标路径无对应文件,自动触发不支持断点续传的下载任务,新下载的残缺文件会直接覆盖你手动放入的文件,导致问题重复出现。
可行解决步骤
  1. 先校验现有文件完整性:正常2019年3月27日的ITCH50压缩包大小在1.2GB-1.5GB区间,右键查看文件属性如果远小于该数值,直接删除残缺文件。
  2. 优先修改代码避免自动覆盖,注释原自动下载逻辑,直接指定你要读取的本地文件路径,修改后的参考代码如下:
# 注释掉原有自动下载代码,避免重复下载残缺文件
# file_name = may_be_download(urljoin(FTP_URL, SOURCE_FILE))
# 直接指定手动下载的文件路径,根据你实际存放路径调整即可
file_name = Path("./data/03272019.NASDAQ_ITCH50.gz")
date = file_name.name.split('.')[0]
  1. 使用支持断点续传的工具下载完整文件:
    • 打开终端执行wget命令下载:wget -c ftp://anonymous@ftp.nasdaqtrader.com/ITCH/03272019.NASDAQ_ITCH50.gz -P ./data/,-c参数支持断点续传,网络中断后重新执行同一条命令即可继续下载,无需从头传输。
    • 下载完成后执行完整性校验命令:gzip -t ./data/03272019.NASDAQ_ITCH50.gz,如果命令执行后无任何输出,说明文件完整无损坏,可正常运行后续代码。
  2. 若该日期文件始终下载失败,可以更换纳斯达克公开的其他日期的ITCH50测试文件,仅需修改代码中SOURCE_FILE变量为对应日期的文件名即可,无需固定使用2019年3月27日的文件完成教程练习。

内容的提问来源于stack exchange,提问作者sir.isaac.newton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:09:01