Python如何直接流式读取远程URL文件而非下载到本地?
无需下载直接流式读取远程文件的Python方法
对于远程HTTP文件,你可以用以下两种方式实现流式读取,不用先下载到本地:
方法1:使用requests库(推荐,语法简洁)
requests是Python常用的HTTP请求库,支持流式传输,写法和本地读取文件很像。
首先确保已安装requests(未安装的话执行pip install requests),然后用以下代码:
import requests url = "http://.../file.jpg" # stream=True开启流式传输,不会一次性把整个文件拉进内存 with requests.get(url, stream=True) as r: r.raise_for_status() # 检查请求是否成功,失败会抛出异常 data = r.read() # 读取全部文件内容到变量,和你本地的file.read()逻辑一致
如果是大文件,推荐分块读取以避免占用过多内存:
import requests url = "http://.../file.jpg" with requests.get(url, stream=True) as r: r.raise_for_status() # 每次读取1MB的块,可根据需求调整chunk_size for chunk in r.iter_content(chunk_size=1024*1024): # 在这里处理每个数据块,比如直接处理流或者写入本地文件 # process_chunk(chunk)
方法2:使用Python标准库urllib.request
如果不想安装第三方库,用Python自带的标准库就能实现:
from urllib.request import urlopen url = "http://.../file.jpg" with urlopen(url) as response: data = response.read() # 读取全部内容 # 分块读取的写法: # while True: # chunk = response.read(1024*1024) # if not chunk: # break # # 处理chunk
以上两种方式都是直接从远程URL流式获取数据,不会将文件保存到本地硬盘,和你本地用open()读取文件的资源管理逻辑一致,都通过with语句自动关闭连接。
内容的提问来源于stack exchange,提问作者user12845915
相关产品推荐
相关产品推荐

