如何使用 boto3 将 S3 对象保存到文件

2023-12-10

我正在尝试用 new 做一个“hello world”boto3AWS 的客户端。

我的用例相当简单:从 S3 获取对象并将其保存到文件中。

在 boto 2.X 中我会这样做:

import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')

在博托 3 。我找不到一种干净的方法来做同样的事情,所以我手动迭代“Streaming”对象:

import boto3
key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get()
with open('/tmp/my-image.tar.gz', 'w') as f:
    chunk = key['Body'].read(1024*8)
    while chunk:
        f.write(chunk)
        chunk = key['Body'].read(1024*8)

or

import boto3
key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get()
with open('/tmp/my-image.tar.gz', 'w') as f:
    for chunk in iter(lambda: key['Body'].read(4096), b''):
        f.write(chunk)

而且效果很好。我想知道是否有任何“本机”boto3 函数可以执行相同的任务?


Boto3 最近进行了一项定制,这有助于解决此问题(除其他外)。它目前暴露在低级 S3 客户端上,可以像这样使用:

s3_client = boto3.client('s3')
open('hello.txt').write('Hello, world!')

# Upload the file to S3
s3_client.upload_file('hello.txt', 'MyBucket', 'hello-remote.txt')

# Download the file from S3
s3_client.download_file('MyBucket', 'hello-remote.txt', 'hello2.txt')
print(open('hello2.txt').read())

这些函数将自动处理读/写文件以及对大文件并行进行分段上传。

注意s3_client.download_file不会创建目录。它可以被创建为pathlib.Path('/path/to/file.txt').parent.mkdir(parents=True, exist_ok=True).

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

如何使用 boto3 将 S3 对象保存到文件 的相关文章

  • 在 SQLAlchemy 中,过滤器是在连接之前还是之后应用?

    使用 SQLAlchemy 我执行如下查询 import models as m import sqlalchemy as sa s session maker q s query m ShareCount m Article join m
  • 学习Python中的解析器

    我记得我读过有关解析器的内容 您只需提供一些示例行 它就知道如何解析某些文本 它只是确定两条线之间的差异 以了解可变部分是什么 我以为它是用 python 写的 但我不确定 有谁知道那是什么图书馆吗 可能你的意思是模板制作器 http co
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • 在Python中将大文件(25k条目)加载到dict中很慢?

    我有一个大约有 25000 行的文件 它是 s19 格式的文件 每行就像 S214780010 00802000000010000000000A508CC78C 像这样的事情怎么样 我做了一个测试文件 只有一行S21478001000802
  • Cognito SRP 身份验证 JAVA SDK

    我正在尝试使用 Cognito 验证 Java 应用程序 我在Python中使用了warrant库 效果非常好 但我现在想在java中做同样的事情 我的 Python 函数用于身份验证warrant https github com cap
  • 在 python 中发送标头[重复]

    这个问题在这里已经有答案了 我有以下 python 脚本 我想发送 假 标头信息 以便我的应用程序就像 Firefox 一样运行 我怎么能这么做呢 import urllib urllib2 cookielib username passw
  • Discord.py 斜线命令在 cogs 中不起作用

    我正在构建一个不和谐的机器人 并且想要在 cogs 内使用斜杠命令 但这些命令不显示或工作 这是代码 cog guild ids 858573429787066368 861507832934563851 class Slash comma
  • 在多核上运行 python 线程

    我知道Python 2 7不允许在不同的内核上运行多个线程 你需要使用multiprocessing模块以实现某种程度的并发性 我正在看concurrent futuresPython 3 4 中的模块 是否使用ThreadPoolExec
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • ImproperlyConfigured at / 不允许空静态前缀 - Django

    我正在使用 Django 上传 显示图像 该网站部署在 Heroku 上 下列的this https coderwall com p bz0sng教程我能够成功上传图像 但是 图像并未显示在模板中 然后我了解到我的 urls py 末尾应该
  • Python GTK3 Treeview 向上或向下移动选择

    如何在树视图中向上或向下移动所选内容 我的想法是 我可以使用向上和向下按钮将选择向上移动一行或向下移动一行 我的 Treeview 使用 ListStore 不确定这是否重要 首先 我将使用我熟悉的 C 代码 如果您在将其翻译为 Pytho
  • 将 str.contains 映射到 pandas DataFrame

    python 初学者 我正在寻找创建字符串的字典映射以及关联的值 我有一个数据框 想要创建一个新列 如果字符串匹配 则会将该列标记为 x df pd DataFrame comp dell notebook dell notebook S3
  • 如何将 django ModelForm 字段显示为不可编辑

    接受我的初步教训django ModelForm 我想让用户能够编辑博客中的条目 BlogEntry has a date postedTime title and content 我想向用户展示一个编辑表单 其中显示所有这些字段 但仅包含
  • 在 4K 屏幕上使用 Matplotlib 和 TKAgg 或 Qt5Agg 后端

    我在 Ubuntu 16 04 上使用 Matplotlib 2 0 和 Python 3 6 来创建数据图 电脑显示器的分辨率为 4k 分辨率为 3840x2160 绘图数字看起来非常小 字体也很小 我已经尝试过TKAgg and Qt5
  • 尝试 numba 时出现巨大错误

    我在使用 numba 时遇到了大量错误 讽刺的是 正确的结果是在错误之后打印的 我正在使用最新的 Anaconda python 并安装了 numba conda install numba 一次在 Ubuntu 13 64 位和 anac
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • JSONDecodeError:额外数据:Python [重复]

    这个问题在这里已经有答案了 我使用以下代码从文件加载 json file file name obj list with open file as f for json obj in f obj list append loads json
  • 如何仅读取 CSV 文件每行的第一列 [重复]

    这个问题在这里已经有答案了 如何在Python中读取CSV文件每行的第一列 我的数据是这样的 1 abc 2 bcd 3 cde 我只需要循环第一列的值 另外 当我在 calc 中打开 csv 文件时 每行中的数据都在同一个单元格中 这正常
  • 在Python中使用os.makedirs创建目录时出现权限问题

    我只是想处理上传的文件并将其写入工作目录中 该目录的名称是系统时间戳 问题是我想以完全权限创建该目录 777 但我不能 使用以下代码创建的目录755权限 def handle uploaded file upfile cTimeStamp
  • 如何使 Django 自定义管理命令参数不再需要?

    我正在尝试在 django 中编写自定义管理命令 如下所示 class Command BaseCommand def add arguments self parser parser add argument delay type int

随机推荐

  • 如何使用 System.Net.ConnectStream?

    我正在尝试了解我前辈的一些代码 他们使用 var 来声明所有内容 这很有帮助 我有一个使用声明如下 using var postStream request GetRequestStream postStream Write byteDat
  • 了解 ImageMagick 的转换并转换为 Ruby RMagick

    我未能将以下 PHP ImageMagick 代码转换为 Ruby RMagick 以使未来的用户更易于管理并了解它真正在做什么 output array returnValue 0 pngFiles myDir gt find png i
  • 启用 Docker 远程 API - raspberry pi / raspbian

    我的出发点是 如何使用docker Remote api创建容器 所以我编辑 etc init docker conf并更新 2 次出现的DOCKER OPTS变量为 DOCKER OPTS H tcp 0 0 0 0 4243 H uni
  • “无法设置 Range 类的 Width 属性”

    我正在致力于自动化构建成本估算表 基于假设 规则 政策等 一切顺利 直到我想自动设置列宽 这里有一个简短的蒸馏 Dim NumCE As Integer Dim TotalWidth As Integer NumCE 1 Sheets Co
  • jqGrid 删除一行

    我已经创建了网格 并想使用网格的默认行为来删除一行 这是我的网格设置代码 grid jqGrid navGrid grid pager add true addtitle Add Customer edit true edittitle E
  • isReleaseBuild() 是 Android Gradle DSL 的一部分吗?

    我按照类似于以下的说明进行操作 Android Library Gradle 发布 JAR 但是 我收到以下错误 在项目 myProject 上找不到参数 的 isReleaseBuild 方法 我在 Maven 集成中看到的示例都没有定义
  • Pandas 数据帧太大而无法附加到 dask 数据帧?

    我不确定我在这里缺少什么 我认为 dask 可以解决我的内存问题 我有 100 多个以 pickle 格式保存的 pandas 数据帧 我希望将它们全部放在同一个数据框中 但不断遇到内存问题 我已经增加了 jupyter 中的内存缓冲区 看
  • Firefox 浏览器无法识别 table.cells 吗?

    我有以下 JavaScript 代码 var myCellCollection document getElementById myTbl cells 这在 IE 中效果很好 它返回表格单元格的集合 但同一行在 Firefox 中返回 未定
  • 在不使用配置规范的情况下从 Clearcase 复制具有特定标签的元素

    如何从中复制元素或文件Clearcase具有特定的label 不应用该label in config specs 我不想更改视图的配置规范 但我需要访问所选文件之一的旧版本 并且我想直接从现有视图执行此操作 同样 不更改任何内容 我知道我想
  • iOS 13 文本转语音(TTS - AVSpeechSynthesisVoice)更新后某些用户崩溃

    更新到 iOS 13 后 我们发现一小部分用户因 TTS 问题而出现奇怪的崩溃 有人知道为什么会发生这种情况吗 有人看到同样的崩溃吗 let voices AVSpeechSynthesisVoice speechVoices for vo
  • 使用空手道框架执行 API 测试时观察到 DNS 错误 [重复]

    这个问题在这里已经有答案了 在通过 karat 对 api 执行 get 调用时 当我使用的代理被注释时观察到 DNS 错误 但如果我使用代理 它会返回 401 错误 下面是以下代码 特征文件代码 Background url baseUr
  • 使用 Dask 导入大型 CSV 文件

    我正在使用 Dask 导入一个非常大的 csv 文件 680GB 但是 输出不是我所期望的 我的目标是仅选择一些列 6 50 并可能过滤它们 我不确定 因为似乎没有数据 import dask dataframe as dd file pa
  • SQL 截断、删除、删除建议

    我在 SQL 数据库中有一个表 想要从中删除数据 不过我想保留这些列 例如我的表有 3 列 姓名 年龄 日期 我不想删除这些 我只想删除数据 我应该截断 删除还是删除 不要删除 它会删除数据和定义 如果删除 数据就会消失 并且自动增量值将从
  • 如何将文本放置在边框上?

    我能够让它在白色背景下工作 但在背景不是白色的情况下 该解决方案也不起作用 我做了什么应该很明显为什么它不起作用 负边距 背景设置为背景颜色 有什么解决方案可以使它始终看起来不错吗 一种方法是使用间隔跨度和包装器 在本例中header 所有
  • Diesel:BoxableExpressions 在表及其连接上通用?

    我正在尝试在运行时构造一些过滤器 这些过滤器可以应用于表tunnel or to tunnel LEFT OUTER JOIN connection ON tunnel id connection tunnel id 这些表的定义如下 De
  • 剥离 HTML 标签以获取 python 中的字符串

    我尝试使用 BeautifulSoup 从 HTML 文件中获取一些字符串 每次使用它时我都会得到部分结果 我想获取每个 li 元素 标签中的字符串 到目前为止 我已经能够像这样获得 ul 中的所有内容 usr bin python fro
  • 对数据点拟合更好的高斯分布?

    我试图将高斯拟合到一组似乎遵循高斯分布的数据点 我已经检查了很多可能的方法来做到这一点 但我并不真正理解其中的大多数 然而 我找到了一个似乎有效的解决方案 但我得到的实际拟合结果看起来并不比我的数据点更像高斯 这是我的代码 import n
  • Magento - 订单详细信息不显示在管理面板中

    我们有一个电子商务 magento 商店 现在 我们遇到了一个奇怪的问题 我无法理解和调试 对于某些订单 虽然邮件已正确发送给客户并抄送至我们的电子邮件 ID 但 magento 管理的订单详细信息页面中未显示任何详细信息 管理订单详细信息
  • Flex 项目是块级元素吗?

    Flex 项目是 Flex 级别的元素 但它是块级别的元素吗 根据CSS 灵活框布局模块第 1 级第 4 章 弹性项目被认为是在弹性级别而不是在块级别 Flex 项目为其内容建立独立的格式化上下文 然而 弹性项目本身是弹性级别的 盒子 而不
  • 如何使用 boto3 将 S3 对象保存到文件

    我正在尝试用 new 做一个 hello world boto3AWS 的客户端 我的用例相当简单 从 S3 获取对象并将其保存到文件中 在 boto 2 X 中我会这样做 import boto key boto connect s3 g