如何使用Python列出S3子目录中的文件

9

我正在尝试列出S3子目录下的文件,但无法列出文件名:

import boto
from boto.s3.connection import S3Connection
access=''
secret=''
conn=S3Connection(access,secret)
bucket1=conn.get_bucket('bucket-name')
prefix='sub -directory -path'
print bucket1.list(prefix) 
files_list=bucket1.list(prefix,delimiter='/') 
print files_list
for files in files_list:
  print files.name

你能帮我解决这个问题吗?

2个回答

19

在 Prefix 结尾添加 / 可以修复您的代码。

使用 boto3 的现代等效方法为:

import boto3
s3 = boto3.resource('s3')

## Bucket to use
bucket = s3.Bucket('my-bucket')

## List objects within a given prefix
for obj in bucket.objects.filter(Delimiter='/', Prefix='fruit/'):
    print(obj.key)

输出:

fruit/apple.txt
fruit/banana.txt

与使用S3客户端不同,此代码使用boto3提供的S3对象,这使得某些代码更简单。


2
这个方法在列举方面有任何限制吗? 如果我的存储桶中有5000或7000个对象,这个方法会列出所有的键吗? - Shivkumar Mallesappa
1
@ShivkumarMallesappa 请创建一个新的问题,而不是在旧问题的评论中提问。 - John Rotenstein
1
@ShivkumarMallesappa 在boto3中使用资源旨在让您摆脱在较低级别处理API时所需的分页编码。 - chicks

11

您可以使用boto3来完成此操作。列出所有的文件。

import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket-name')
objs = list(bucket.objects.filter(Prefix='sub -directory -path'))
for i in range(0, len(objs)):
    print(objs[i].key)

这段代码将打印出子目录中所有带路径的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接