python中zip档案的流式解压

2024-01-16

有没有办法对单文件 zip 档案进行流式解压缩?

我目前在 s3 中有任意大的压缩存档(每个存档一个文件)。我希望能够通过迭代来处理文件,而不必实际将文件下载到磁盘或内存中。

一个简单的例子:

import boto

def count_newlines(bucket_name, key_name):
    conn = boto.connect_s3()
    b = conn.get_bucket(bucket_name)
    # key is a .zip file
    key = b.get_key(key_name)

    count = 0
    for chunk in key:
        # How should decompress happen?
        count += decompress(chunk).count('\n')

    return count

这个答案 https://stackoverflow.com/a/12572031/888970演示了对 gzip 文件执行相同操作的方法。不幸的是,我无法使用相同的技术来工作zipfile模块,因为它似乎需要随机访问正在解压缩的整个文件。


虽然我怀疑绝对所有 zip 文件都不可能,但我也怀疑几乎(?)所有现代 zip 文件都是流兼容的,并且可以进行流解压缩,例如使用https://github.com/uktrade/stream-unzip https://github.com/uktrade/stream-unzip[完全公开:最初是我写的]

其自述文件中的示例展示了如何使用 httpx 通过任意 http 请求来执行此操作

from stream_unzip import stream_unzip
import httpx

def zipped_chunks():
    # Any iterable that yields a zip file
    with httpx.stream('GET', 'https://www.example.com/my.zip') as r:
        yield from r.iter_bytes(chunk_size=65536)

for file_name, file_size, unzipped_chunks in stream_unzip(zipped_chunks()):
    for chunk in unzipped_chunks:
        print(chunk)

但我认为它可以适用于 boto3 从 S3 流解压缩/解压缩(未经测试):

from stream_unzip import stream_unzip
import boto3

def zipped_chunks():
    yield from boto3.client('s3', region_name='us-east-1').get_object(
        Bucket='my-bucket-name',
        Key='the/key/of/the.zip'
    )['Body'].iter_chunks()

for file_name, file_size, unzipped_chunks in stream_unzip(zipped_chunks()):
    for chunk in unzipped_chunks:
        print(chunk)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中zip档案的流式解压 的相关文章

  • 在 python + openCV 中使用网络摄像头的问题

    我正在使用以下代码使用 openCV python 访问我的网络摄像头 import cv cv NamedWindow webcam feed cv CV WINDOW AUTOSIZE cam cv CaptureFromCAM 1 然
  • 更改 Inkscape 的 Python 解释器

    在使用 Inkscape 时 我不断收到错误 这似乎意味着未满足 python 2 vs 3 的期望 尽管我已经安装了它们 例如 当我尝试从模板生成新文档时 我得到 Traceback most recent call last File
  • 使用 python 通过搜索端点从 Spotify API 获取曲目

    因此 我尝试使用 API 的搜索端点进行搜索 从而从 Spotify API 获取曲目 请参阅文档 https developer spotify com documentation web api reference search sea
  • 将 stdout 重定向到 Python 中的文件? [复制]

    这个问题在这里已经有答案了 如何将 stdout 重定向到 Python 中的任意文件 当长时间运行的 Python 脚本 例如 Web 应用程序 从 ssh 会话内启动并处于后台 并且 ssh 会话关闭时 应用程序将引发 IOError
  • 在 Python 中比较日期 - 如何处理时区修饰符

    我正在做Python日期比较 假设我有一个这样的约会 Fri Aug 17 12 34 00 2012 0000 我按以下方式解析它 dt datetime strptime Fri Aug 17 12 34 00 2012 0000 a
  • 用于打印 C/C++ 文件的所有函数定义的 Python 脚本

    我想要一个 python 脚本来打印 C C 文件中定义的所有函数的列表 e g abc c定义两个函数为 void func1 int func2 int i printf d i return 1 我只想搜索文件 abc c 并打印其中
  • Python 3.x 中的 PIL ImageTk 等效项

    我正在使用 Tkinter 开发一个应用程序 它使用以下数据库png图标的图像文件 为了在应用程序中使用所述图像 我使用 PIL 打开它们Image open 运行它通过ImageTk PhotoImage函数 然后将其传递给小部件构造函数
  • Python3模拟用另一个函数替换函数

    如何使用 python 中的另一个函数来模拟一个函数 该函数也将提供一个模拟对象 我有类似以下操作的代码 def foo arg1 arg2 r bar arg1 does interesting things 我想替换的实现bar函数 让
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • Selenium 网页抓取与动态内容和隐藏数据表上的美丽汤

    真的需要这个社区的帮助 我正在使用 Selenium 和 Beautiful Soup 对 Python 中的动态内容进行网页抓取 问题是定价数据表无法解析为 Python 即使使用以下代码 html browser execute scr
  • 超时时杀死或终止子进程?

    我想尽可能快地重复执行子进程 然而 有时这个过程会花费太长的时间 所以我想杀死它 我使用 signal signal 如下所示 ppid pipeexe pid signal signal signal SIGALRM stop handl
  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • 将带有两层分隔符的字符串转换为字典 - python

    给定一个字符串 s x t1 ny t2 nz t3 我想转换成字典 sdic x 1 y 2 z 3 我通过这样做让它工作 sdic dict tuple j split t for j in i for i in s split n F
  • 散景中的时间序列流

    我想在散景中绘制实时时间序列 我只想在每次更新时绘制新的数据点 我怎样才能做到这一点 散景网站上有一个动画情节的示例 但它每次都需要重新绘制整个图片 另外 我正在寻找一个简单的示例 我可以在其中逐点绘制时间序列的实时绘图 散景效果0 11
  • 将 ASCII 字符转换为“”unicode 表示法的脚本

    我正在对 Linux 区域设置文件进行一些更改 usr share i18n locales like pt BR 并且需要格式化字符串 例如 d m Y H M 必须以 Unicode 指定 其中每个 在本例中为 ASCII 字符表示为
  • Scrapy - 不会爬行

    我正在尝试运行递归爬行 由于我编写的爬行不能正常工作 因此我从网络上提取了一个示例并进行了尝试 我真的不知道问题出在哪里 但是爬行没有显示任何错误 谁能帮我这个 另外 是否有任何逐步调试工具可以帮助理解蜘蛛的爬行流程 非常感谢任何与此相关的
  • Pandas - 分割大的Excel文件

    我有一个大约有 500 000 行的 Excel 文件 我想将其拆分为多个 Excel 文件 每个文件有 50 000 行 我想用熊猫来做 这样它会是最快和最简单的 有什么想法如何制作吗 感谢您的帮助 假设您的 Excel 文件只有一个 第
  • 对 pandas 数据框中的每一列应用函数

    我如何以更多的熊猫方式编写以下函数 def calculate df columns mean self df means for column in df columns columns tolist cleaned data self
  • 如何在 Python 中解析损坏的 XML?

    我无法影响的服务器发送的 XML 非常损坏 具体来说 Unicode WHITE STAR 将被编码为 UTF 8 E2 98 86 然后使用 Latin 1 转换为 HTML 实体表 我得到的是 acirc 98 86 9 个字节 位于声
  • 使用 Maven 创建 ZIP 存档

    我在这里遵循了如何在 Maven 中创建 ZIP 存档的答案 https stackoverflow com a 2514677 1395165 https stackoverflow com a 2514677 1395165还有几个后续

随机推荐

  • 如何链接相同或不同文件夹中的html页面?

    如果 html 页面位于相同或不同的文件夹中 而无需编写完整路径 如何链接到它们 在同一文件夹中 只需使用文件名 a href thefile html my link a 在父文件夹的目录中 a href thefile html my
  • python 中的迭代

    您好 我想创建一些代码来打印一个如下所示的框 代码应该使用循环来打印一行框 使用 for i in range 5 不应该使用 IF 语句来解决这个问题 只使用一个框 如下所示 我尝试使用下面的代码 但没有产生所需的输出 请帮忙 for i
  • Firebase:自动创建/更新多个子节点

    假设我有一个带有 用户 节点和 宠物 节点的项目 当用户获得宠物时 我想将宠物的密钥添加到用户的 pets 节点 并将用户 ID 添加到宠物的 owner 节点 Example users user1 pets pet1 true pet3
  • 在 Xcode 11 中将分支合并到 master 中?

    我一定在这里遗漏了一些非常简单的东西 在早期版本的 Xcode 上 我从未遇到过将分支合并到 master 中的问题 但在使用 Xcode 11 时 我在任何项目上都没有该选项 我应该如何合并到master 谢谢 这是一个令人沮丧的 Xco
  • 使用 C# 从 Parquet 文件中读取前 100 行

    我有这些巨大的镶木地板文件 存储在一个 blob 中 有超过 60 万行 我想检索前 100 个 以便我可以将它们发送到我的客户端应用程序 这是我现在用于此功能的代码 private async Task lt Table gt getPa
  • 如何查找 Ruby 哈希的“nil”值并将其替换为“None”或 0?

    我试图深入到数组嵌套哈希迭代中的每个值并替换所有值nil值带有 无 或 0 之类的值 请参阅我的代码 它显然不起作用 在将其传递到 Rails 中的视图进行迭代和渲染之前 我需要修复此问题 我的控制器 def show results Re
  • SECURITY_ERR:调用 Canvas 的 toDataURL 方法时出现 DOM 异常 18

    当我尝试从在 Internet Explorer 和 Safari 浏览器上绘制 SVG 图像的画布检索数据 URL 时 出现以下错误 而其他浏览器都正常工作 此外 SVG 图像还包含一些
  • 使用sequelize的种子数据的不同目录

    我希望在开发和生产之间有不同的种子数据 我如何在配置中指定它 我知道在 sequelizerc我可以加载动态配置文件并指定seeders path sequelizerc const path require path module exp
  • C 中的库存程序。需要有关如何从库存中删除项目的帮助

    这是一个保存库存的程序 该程序显示一个选项菜单 除了删除条目功能之外 其他一切都很完美 我不知道如何让它删除一个功能 我放置了一个变量来查找位置 但我真的不知道如何 我输入要删除的项目名称 然后输入显示条目 它会陷入无限混乱 有人帮助我如何
  • 使用 torchtext 时出现 ImportError

    当我尝试运行这行代码时 出现以下错误 from torchtext data import Field TabularDataset BucketIterator Iterator ImportError cannot import nam
  • Gradle从哪个版本开始支持Java 17

    当尝试配置项目时 我收到错误 不支持 Java 您的构建当前配置为使用 Java 17 0 1 和 Gradle 7 0 不幸的是 没有信息官方文档 https docs gradle org current userguide compa
  • CAtlList::RemoveAt 是否会使现有的 POSITIONS 无效?

    我正在看这个 其中 m Rows 是 CAtlList void CData RemoveAll size t cItems m Rows GetCount POSITION Pos m Rows GetHeadPosition while
  • 如何按特定顺序自动启动程序?

    我的 i3 配置文件中有以下几行 Startup applications exec firefox exec gnome terminal exec nautilus 这些行按预期启动 firefox gnome terminal 和 n
  • Erlang 和带有西里尔字母的二进制

    我需要能够使用其中包含西里尔字符的二进制文件 我尝试只写 lt lt gt gt 但我收到了 badarg 错误 如何在 Erlang 中使用西里尔字母 或 unicode 字符串 如果你想输入上面的表达式erlang shell 请阅读u
  • 使用基于单选按钮值的 javascript(Node JS) 将数据插入 mysql(Sequelize)

    我有下面的 json 对象 phoneno field1 Mohamed field2 123456789 field3 Sameer field1 Ganesh field2 987654321 field3 Pandiyan sende
  • “现代”正则表达式的识别能力

    真正的现代正则表达式实际上可以识别哪一类语言 每当存在带有反向引用的无限长度捕获组时 例如 1 正则表达式现在匹配非常规语言 但这本身并不足以匹配类似的东西S S 匹配括号对的上下文无关语言 递归正则表达式 这对我来说是新的 但我确信 Pe
  • 如何为 NDK 工具链的 gcc 包含

    首先 我上次尝试将c程序编译到linux arm架构时遇到了一个问题 以便稍后在android应用程序中使用它 我成功地做到了这一点 稍后我将写一篇关于如何使用 NDK 独立工具链的文章 现在我终于开始工作了 我正在尝试编译一个 c 文件
  • 画半条无限直线?

    我使用 pyqtgraph 进行数据采集 并且必须在图形视图上表示一些阈值 例如表示高电压限制等 我使用了该类InfiniteLine来自 pyqtgraph 但现在 我必须考虑在采集过程中阈值可能发生的一些变化 它看起来像是两条无限线之间
  • 为什么 Dapper dot net 不自行打开和关闭连接?

    Dapper 隐式地期望连接在使用时打开 为什么它不自己打开和关闭 这不是简单的连接管理吗 我问这个问题是因为我和一位同事一直在反复探讨连接池幕后发生的事情的本质 以及在多个命令中保持连接打开或打开和关闭连接是否有任何好处对于每个命令 Da
  • python中zip档案的流式解压

    有没有办法对单文件 zip 档案进行流式解压缩 我目前在 s3 中有任意大的压缩存档 每个存档一个文件 我希望能够通过迭代来处理文件 而不必实际将文件下载到磁盘或内存中 一个简单的例子 import boto def count newli