Python 如何在不创建本地副本的情况下从联机gzip文件读取数据?

Python 如何在不创建本地副本的情况下从联机gzip文件读取数据?,python,gzip,mnist,urlretrieve,Python,Gzip,Mnist,Urlretrieve,我刚开始编程,并尝试用手写数字的MNIST数据库来训练人工智能模型。我已经有了一个正在运行的代码,但现在想深入研究更多细节 在这个项目中,我要做的第一件事是读取.gz扩展名文件,其中整数以MBS First格式存储。我已通过以下代码成功地完成了此操作: [ urllib.request.urlretrieve(“http://yann.lecun.com/exdb/mnist/%s.gz%file,“%s.gz”%file) 我检查了urllib.request.urlretrieve()功能的

我刚开始编程,并尝试用手写数字的MNIST数据库来训练人工智能模型。我已经有了一个正在运行的代码,但现在想深入研究更多细节

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

[ urllib.request.urlretrieve(“http://yann.lecun.com/exdb/mnist/%s.gz%file,“%s.gz”%file)

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

我想了解是否可以在不创建本地副本的情况下执行相同的任务。是否可以在不使用URL检索的情况下以不同的方式读取联机.gz文件


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

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

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

从urllib.request导入urlopen
流式_文件=urlopen(f)http://yann.lecun.com/exdb/mnist/{file}.gz”)
将gzip.GzipFile(fileobj=streamed_file)作为f_输入:
以open(f“{file}”,“wb”)作为f_out:
shutil.copyfileobj(f_-in,f_-out)
注意,我正在使用

我还没有测试过这段代码,但是这个想法应该行得通,因为它们都在“类似文件的对象”上运行,这基本上只是意味着它们都实现了

中描述的接口。请注意,(至少)在Linux上,临时文件意味着ram磁盘;而文件可能不适合ram(因此它无论如何都会交换)。
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]