我正在测试XML中的新数据Feed。这些数据将以下列格式存储在S3中:
2018 \ 1个\ 2 \ 1.XML 2018 \ 1 \ 3 \ 1.XML 2018 \ 1 \ 3 \ 2.XML
等。因此,一天可以使用多个.xml文件。另外,需要注意的是,这个存储桶中有些文件夹我不想拉。所以我必须定位一个非常具体的目录。
文件中没有日期时间戳,所以我需要使用创建,修改过的东西。为此,我想到使用键的字典,将文件夹+ xml文件作为键,创建/修改时间戳作为值。然后,使用该dict基本上重新拉动所有对象。
这是我尝试过的......
我
mport boto3
from pprint import pprint
client = boto3.client('s3')
paginator = client.get_paginator('list_objects_v2')
result = paginator.paginate(
Bucket='bucket',
Prefix='folder/folder1/folder2')
bucket_object_list = []
for page in result:
pprint(page)
if "Contents" in page:
for key in page[ "Contents" ]:
keyString = key[ "Key" ]
pprint(keyString)
bucket_object_list.append(keyString)
s3 = boto3.resource('s3')
obj = s3.Object('bucket','bucket_object_list')
obj.get()["Contents"].read().decode('utf-8')
pprint(obj.get())
sys.exit()
这是在obj = s3.Object(' cluster',' key')行中从键中抛出错误。
Traceback (most recent call last):
File "s3test2.py", line 25, in <module>
obj = s3.Object('cluster', key)
NameError: name 'key' is not defined
Maxitems纯粹是出于测试目的,虽然它很有趣,因为在运行时它会转换为1000.
答案 0 :(得分:1)
NameError: name 'key' is not defined
就错误而言,这是因为没有定义密钥。
来自this文档:
对象(bucket_name,key)
创建一个Object资源。:
object = s3.Object('bucket_name','key')
<强>参数强>
bucket_name(string) - Object的bucket_name标识符。这必须设置。
key(string) - 对象的密钥标识符。这必须设置。
您需要为代码中使用的“密钥”指定对象密钥名称
keyName是“名称”(=唯一标识符),您的文件将通过该名称存储在S3存储桶中
基于您发布的内容的代码:
import boto3
client = boto3.client('s3')
paginator = client.get_paginator('list_objects_v2')
result = paginator.paginate( Bucket='bucket_name', Prefix='folder/folder1/folder2')
bucket_object_list = []
for page in result:
if "Contents" in page:
for key in page[ "Contents" ]:
keyString = key[ "Key" ]
print(keyString)
bucket_object_list.append(keyString)
print bucket_object_list
s3 = boto3.resource('s3')
for file_name in bucket_object_list:
obj = s3.Object('bucket_name',file_name)
print(obj.get())
print(obj.get()["Body"].read().decode('utf-8'))