我正在查看 boto3 文档,但找不到它本身是否支持检查文件是否已存在于 s3 中,如果不存在,请不要尝试重新上传。
这是我正在做的工作:
import boto3
s3_client = boto3.client('s3')
s3_bucket = 'bucketName'
s3_folder = 'folder1234/'
temp_log_dir = "tempLogs/"
s3_client.upload_file(temp_log_dir + file_name, s3_bucket, s3_folder + file_name)
我注意到的是,如果文件已经存在于 S3 中,则 boto3 中的 .upload_file() 仍然会传输文件。我通过查看 iftop 进行了此检查。
我是否缺少一些参数来禁用“如果文件存在则自动覆盖”?
Thanks
edit尝试头部方法
s3 = boto3.resource('s3')
file_name = 'somelogfile.gz'
try:
s3.Object(s3_bucket+ s3_folder+s3_filename).load()
print 'success'
except botocore.exceptions.ClientError as e:
print e
您可以使用以下方法测试对象是否存在s3_client.head_object()
or s3_service.Object().load()
:
import boto3
from botocore.exceptions import ClientError
def check(s3_client, bucket, key):
try:
s3_client.head_object(Bucket=bucket, Key=key)
except ClientError as e:
return int(e.response['Error']['Code']) != 404
return True
s3_client = boto3.client('s3')
print(check(s3_client, <bucket>, <key>))
With s3
服务资源这将实现相同的效果:
def check(s3_service, bucket, key):
try:
s3_service.Object(bucket, key).load()
except ClientError as e:
return int(e.response['Error']['Code']) != 404
return True
s3_service = boto3.resource(service_name='s3')
print(check(s3_service, <bucket>, <key>))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)