如何从 AWS S3 存储桶中获取唯一的对象列表
How to get a unique list of objects from AWS S3 bucket
以下代码连接到 AWS S3 存储桶并return从 S3 存储桶中获取对象列表。我正在尝试通过选择对象的部分值(即 batchID = str((s3_file.name).split("/"))[32:-13])
)从原始列表中创建一个唯一列表。我已将“batchID”声明为数组。当我使用 set() 到 return 唯一值它 returns 每个值中的唯一数字。示例:['1', '0', '3', '2', '5', '4', '9', '8’], ['1', '0', '3', '2', '5', '4', '7', '9', '8’]
等。所以它在列表中水平和垂直地进行重复数据删除。我希望该值是唯一的。见下文预期输出。我还尝试使用嵌套 "for loops" 并使用“不在”到 return 唯一值,但它没有用,它仍在垂直而不是水平地删除重复项。任何人都可以帮忙. 提前谢谢你。
def __init__(self, aws_access_key_id, aws_secret_access_key, aws_bucket_to_download, use_ssl):
self.run_id = []
self.batchID = []
self._aws_connection = S3Connection(aws_access_key_id, aws_secret_access_key, is_secure = use_ssl)
self._runId(aws_bucket_to_download)
def _runId(self,aws_bucket_to_download):
if not self._bucketExists(aws_bucket_to_download):
self._printBucketNotFoundMessage(aws_bucket_to_download)
else:
bucket = self._aws_connection.get_bucket(aws_bucket_to_download)
for s3_file in bucket.list(prefix='Download/test_queue1/'):
batchID = str((s3_file.name).split("/"))[32:-13]
#a = set(batchID)
#batchID = list(a)
print batchID
#newList = list(set(batchID))
#print newList`
输出:
144019080231459
144019080231459
144019800231759
144019800231759
预期输出:
144019080231459
144019800231759
我想您是在问如何删除重复的批次 ID。为什么不在检索时将每个批次 ID 添加到列表中,如果它已经在列表中则忽略它,例如:
batchIDlist = []
for s3_file in bucket.list(prefix='Download/test_queue1/'):
batchID = str((s3_file.name).split("/"))[32:-13]
if batchID not in batchIDlist:
batchIDlist.append(batchID)
这也会使项目按照首次找到时的顺序排列。
以下代码连接到 AWS S3 存储桶并return从 S3 存储桶中获取对象列表。我正在尝试通过选择对象的部分值(即 batchID = str((s3_file.name).split("/"))[32:-13])
)从原始列表中创建一个唯一列表。我已将“batchID”声明为数组。当我使用 set() 到 return 唯一值它 returns 每个值中的唯一数字。示例:['1', '0', '3', '2', '5', '4', '9', '8’], ['1', '0', '3', '2', '5', '4', '7', '9', '8’]
等。所以它在列表中水平和垂直地进行重复数据删除。我希望该值是唯一的。见下文预期输出。我还尝试使用嵌套 "for loops" 并使用“不在”到 return 唯一值,但它没有用,它仍在垂直而不是水平地删除重复项。任何人都可以帮忙. 提前谢谢你。
def __init__(self, aws_access_key_id, aws_secret_access_key, aws_bucket_to_download, use_ssl):
self.run_id = []
self.batchID = []
self._aws_connection = S3Connection(aws_access_key_id, aws_secret_access_key, is_secure = use_ssl)
self._runId(aws_bucket_to_download)
def _runId(self,aws_bucket_to_download):
if not self._bucketExists(aws_bucket_to_download):
self._printBucketNotFoundMessage(aws_bucket_to_download)
else:
bucket = self._aws_connection.get_bucket(aws_bucket_to_download)
for s3_file in bucket.list(prefix='Download/test_queue1/'):
batchID = str((s3_file.name).split("/"))[32:-13]
#a = set(batchID)
#batchID = list(a)
print batchID
#newList = list(set(batchID))
#print newList`
输出:
144019080231459
144019080231459
144019800231759
144019800231759
预期输出:
144019080231459
144019800231759
我想您是在问如何删除重复的批次 ID。为什么不在检索时将每个批次 ID 添加到列表中,如果它已经在列表中则忽略它,例如:
batchIDlist = []
for s3_file in bucket.list(prefix='Download/test_queue1/'):
batchID = str((s3_file.name).split("/"))[32:-13]
if batchID not in batchIDlist:
batchIDlist.append(batchID)
这也会使项目按照首次找到时的顺序排列。