【发布时间】:2018-11-10 01:33:27
【问题描述】:
我正在尝试从托管在 aws 上的 s3 存储桶下载密钥。密钥不过是一些 .csv 文件。但这些文件存储在 s3 存储桶内的子目录中。当我尝试使用 s3_client.list_objects-v2(Bucket_name) 方法列出特定文件名时,返回的是密钥的完整层次结构以及它们在 s3 存储桶中存在的文件夹。喜欢, 对于存储桶,bucket_1
file_name='my_file.csv'
resp=s2_client_conn.list_objects_v2(Bucket='bucket_1')
for obj in resp['Contents']:
if file_name in obj['Key']:
print(obj['Key'])
输出是:
sub_dir_1/sub_dir_2/my_csv_file.csv
为什么它不单独打印文件名?键名是指向文件所在的 s3 存储桶的整个目录结构还是此处缺少其他内容?
【问题讨论】:
-
我猜你正在使用 boto3,在 boto 中你不能只将文件列为 linux。它将返回所有文件,您可以通过 Delimiter='/' 对其进行限制。我不是 python 专家,我确信有一种方法可以只过滤 CSV 文件。
-
是的,我尝试使用 keyname.rindex('/') 限制键,它会打印出 .csv 文件名。但是,如果我要下载这些,它仍然需要整个目录结构并在本地服务器路径中相应地创建子文件夹。有什么办法可以避免吗?
标签: python amazon-web-services amazon-s3 boto3