如何从亚马逊s3桶中删除文件?

问题描述 投票:63回答:9

我需要在python中编写代码,从Amazon s3存储桶中删除所需的文件。我可以连接到亚马逊s3存储桶,也可以保存文件,但是如何删除文件呢?

python amazon-s3 bucket
9个回答
79
投票

使用boto找到了另一种方法:

from boto.s3.connection import S3Connection, Bucket, Key

conn = S3Connection(AWS_ACCESS_KEY, AWS_SECERET_KEY)

b = Bucket(conn, S3_BUCKET_NAME)

k = Key(b)

k.key = 'images/my-images/'+filename

b.delete_key(k)

50
投票

使用boto3(目前版本1.4.4)使用S3.Object.delete()

import boto3

s3 = boto3.resource('s3')
s3.Object('your-bucket', 'your-key').delete()

38
投票

使用Python boto3 SDK(并假设为AWS设置了凭据),以下内容将删除存储桶中的指定对象:

import boto3

client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')

3
投票

我很惊讶没有这么简单的方法:key.delete()

from boto.s3.connection import S3Connection, Bucket, Key

conn = S3Connection(AWS_ACCESS_KEY, AWS_SECERET_KEY)
bucket = Bucket(conn, S3_BUCKET_NAME)
k = Key(bucket = bucket, name=path_to_file)
k.delete()

2
投票

通过哪个界面?使用REST界面,你只需send a delete

DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: signatureValue

通过SOAP interface

<DeleteObject xmlns="http://doc.s3.amazonaws.com/2006-03-01">
  <Bucket>quotes</Bucket>
  <Key>Nelson</Key>
  <AWSAccessKeyId> 1D9FVRAYCP1VJEXAMPLE=</AWSAccessKeyId>
  <Timestamp>2006-03-01T12:00:00.183Z</Timestamp>
  <Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</DeleteObject>

如果你正在使用Python库like boto,它应该公开一个“删除”功能,如delete_key()


1
投票

目前我已经使用Linux实用程序s3cmd解决了这个问题。我在Python中使用它:

delFile = 's3cmd -c /home/project/.s3cfg del s3://images/anon-images/small/' + filename
os.system(delFile)

1
投票

这对我来说很有用。

import boto
import sys
from boto.s3.key import Key
import boto.s3.connection

AWS_ACCESS_KEY_ID = '<access_key>'
AWS_SECRET_ACCESS_KEY = '<secret_access_key>'
Bucketname = 'bucket_name' 

conn = boto.s3.connect_to_region('us-east-2',
        aws_access_key_id=AWS_ACCESS_KEY_ID,
        aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
        is_secure=True,              
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )
bucket = conn.get_bucket(Bucketname)

k = Key(bucket)

k.key = 'filename to delete'
bucket.delete_key(k)   

1
投票

你可以使用aws cli:https://aws.amazon.com/cli/和一些unix命令来做到这一点。

这个aws cli命令应该工作:

aws s3 rm s3://<your_bucket_name> --exclude "*" --include "<your_regex>" 

如果你想包含子文件夹,你应该添加标志--recursive

或使用unix命令:

aws s3 ls s3://<your_bucket_name>/ | awk '{print $4}' | xargs -I%  <your_os_shell>   -c 'aws s3 rm s3:// <your_bucket_name>  /% $1'

说明:

  1. 列出存储桶上的所有文件--pipe - >
  2. 获取第4个参数(它的文件名)--pipe - > //你可以用linux命令替换它以匹配你的模式
  3. 用aws cli运行删除脚本

0
投票

试着寻找last updated method。 Boto3,可能会不时改变。我使用了my_bucket.delete_objects():

import boto3
from boto3.session import Session

session = Session(aws_access_key_id='your_key_id',
                  aws_secret_access_key='your_secret_key')

# s3_client = session.client('s3')
s3_resource = session.resource('s3')
my_bucket = s3_resource.Bucket("your_bucket_name")

response = my_bucket.delete_objects(
    Delete={
        'Objects': [
            {
                'Key': "your_file_name_key"   # the_name of_your_file
            }
        ]
    }
)

© www.soinside.com 2019 - 2024. All rights reserved.