【问题标题】:Is there a way to list or iterate over the CONTENT of a file in S3?有没有办法在 S3 中列出或迭代文件的内容?
【发布时间】:2020-09-30 12:47:52
【问题描述】:

我有一个带有密钥的 S3 对象

我正在尝试迭代 S3 中的键值,这基本上是一个简单的 .txt 文件。我发现了关于迭代对象和列出对象中的文件的类似问题,但到目前为止还没有关于迭代文件本身的实际内容。

下面的代码将返回包含数据的对象和存储桶,但它没有列出它的内容,也没有给我一个选项来迭代它的内容。这似乎只是过滤对象本身的键,但我试图打开或/和迭代键的值。

s3 = boto3.resource('s3')  

bucket = s3.Bucket('account-id-metadata')

for i in bucket.objects.filter(Prefix='data.txt'):
    print(i)

想知道使用 boto3 的 S3 是否可以做到这一点?

注意:这最初是在本地文件中,我打算改为在本地迭代文件;但是,由于大量数据崩溃并占用大量内存,因此我将其移至 S3 以执行相同的功能。

提前谢谢你。

【问题讨论】:

  • 除非您的文件大小为 TB,否则您是否考虑过修改代码对文件的操作方式以不要求将所有文件一次全部加载到内存中?如果您的操作非常重要,您可能会考虑实际使用某种数据库解决方案。
  • 如果您只需要文件中的某些特定行,您可以使用s3 select。您也可以部分地get_object,而不是一次全部。

标签: amazon-web-services amazon-s3 boto3


【解决方案1】:

唯一适用于对象“内容”的 Amazon S3 操作是 S3 Select and Glacier Select – Retrieving Subsets of Objects | AWS News Blog

这允许您使用类似 SQL 的命令从单个对象中提取特定文件格式的行和列。这在想要从大型对象中提取少量信息时很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2011-01-28
    • 1970-01-01
    • 2014-03-23
    • 2020-10-18
    • 1970-01-01
    相关资源
    最近更新 更多