首页 > 解决方案 > Python 从 URL 中分块读取文件

问题描述

我需要从 URL 中读取一个非常大的 jsonl 文件,我使用的方法如下

 bulk_status_info = _get_bulk_info(shop)
 url = bulk_status_info.get('bulk_info').get('url')
 file = urllib.request.urlopen(url)
 for line in file:
    print(json.loads(line.decode("utf-8")))

但是,我的 CPU 和内存是有限的,所以这给我带来了两个问题

  1. 文件是一次性加载的,还是有一些缓冲机制来防止内存溢出。
  2. 如果我的任务失败了,我想从失败的地方开始。有没有我可以保存的光标。注意像 seek 或 tell 这样的东西在这里不起作用,因为它不是一个实际的文件

我正在使用 Python3 和 urllib 的一些附加信息

标签: python

解决方案


该文件将在运行 for 循环之前完整加载。该文件将一个包一个包地加载,但这是由 urllib 抽象出来的。如果您想更近距离地访问,我相信有一种类似于使用 requests 库的方法

通常,除非服务器特别支持,否则无法恢复网页的下载或任何文件请求。这将要求服务器允许指定起点,视频流协议就是这种情况。


推荐阅读