How can I access s3 files in Python using urls?

后端 未结 6 1170
一个人的身影
一个人的身影 2020-12-14 16:44

I want to write a Python script that will read and write files from s3 using their url\'s, eg:\'s3:/mybucket/file\'. It would need to run locally and in the cloud without a

6条回答
  •  时光取名叫无心
    2020-12-14 16:56

    Here's how they do it in awscli :

    def find_bucket_key(s3_path):
        """
        This is a helper function that given an s3 path such that the path is of
        the form: bucket/key
        It will return the bucket and the key represented by the s3 path
        """
        s3_components = s3_path.split('/')
        bucket = s3_components[0]
        s3_key = ""
        if len(s3_components) > 1:
            s3_key = '/'.join(s3_components[1:])
        return bucket, s3_key
    
    
    def split_s3_bucket_key(s3_path):
        """Split s3 path into bucket and key prefix.
        This will also handle the s3:// prefix.
        :return: Tuple of ('bucketname', 'keyname')
        """
        if s3_path.startswith('s3://'):
            s3_path = s3_path[5:]
        return find_bucket_key(s3_path)
    

    Which you could just use with code like this

    from awscli.customizations.s3.utils import split_s3_bucket_key
    import boto3
    client = boto3.client('s3')
    bucket_name, key_name = split_s3_bucket_key(
        's3://example-bucket-name/path/to/example.txt')
    response = client.get_object(Bucket=bucket_name, Key=key_name)
    

    This doesn't address the goal of interacting with an s3 key as a file like object but it's a step in that direction.

提交回复
热议问题