gpt4 book ai didi

python - boto3 file_upload 是否检查文件是否存在

转载 作者:行者123 更新时间:2023-11-28 21:04:41 25 4
gpt4 key购买 nike

我正在查看 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 进行了这项检查。

是否缺少一些参数来禁用“如果文件存在则自动覆盖”?

谢谢

编辑尝试head方法

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()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>))

使用 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>))

关于python - boto3 file_upload 是否检查文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44978426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com