簡體   English   中英

boto3 file_upload 是否檢查文件是否存在

[英]boto3 file_upload does it check if file exists

我正在查看 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>))

您可以使用此代碼

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
key = 'dootdoot.jpg'
objs = list(bucket.objects.filter(Prefix=key))
if len(objs) > 0 and objs[0].key == key:
 print("Exists!")
else:
 print("Doesn't exist")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM