gpt4 book ai didi

python - 如何在不创建本地副本的情况下从在线 gzip 文件中读取数据?

转载 作者:行者123 更新时间:2023-12-04 15:17:02 26 4
gpt4 key购买 nike

我是编程新手,正在尝试使用 MNIST 手写数字数据库训练 AI 模型。我已经有一个可用的代码,但现在想深入研究细节。

在这个项目中我必须做的第一件事是通读 .gz 扩展文件,其中整数以 MBS 优先格式存储。我已通过以下代码成功完成此操作:

[urllib.request.urlretrieve("http://yann.lecun.com/exdb/mnist/%s.gz"% 文件, "%s.gz"% 文件)

with gzip.open("%s.gz" % file, "rb") as f_in:
with open("%s" % file, "wb") as f_out:
shutil.copyfileobj(f_in, f_out)][1]

我检查了 urllib.request.urlretrieve() 的功能描述,它说“将 URL 检索到磁盘上的临时位置”。

我想了解是否可以在不创建本地副本的情况下执行相同的任务。是否可以在没有 urlretrieve 的情况下以不同的方式阅读在线 .gz 文件?

这不是问题。我只是好奇,想更好地了解它。

最佳答案

在开始之前不下载整个文件的处理文件称为“流式传输”。可以流式传输 gzip 压缩文件,因为解码算法通过按顺序读取文件来工作。

您可以使用 urllib.request.urlopen创建一个流文件对象(如图所示 here ),您将其传递给 GzipFile而不是 gzip.open(),例如:

from urllib.request import urlopen

streamed_file = urlopen(f"http://yann.lecun.com/exdb/mnist/{file}.gz")
with gzip.GzipFile(fileobj=streamed_file) as f_in:
with open(f"{file}", "wb") as f_out:
shutil.copyfileobj(f_in, f_out)

注意我使用的是 new string formatting method

我没有测试过这段代码,但这个想法应该可行,因为它们都对“类文件对象”进行操作,这基本上意味着它们都实现了 io.RawIOBase 描述的接口(interface)。

关于python - 如何在不创建本地副本的情况下从在线 gzip 文件中读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64150986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com