如何从 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)

这也会使项目按照首次找到时的顺序排列。