相关疑难解决方法(0)

如何捕获botocore的NoSuchKey异常?

我正在尝试编写"好"的python并捕获S3没有这样的关键错误:

session = botocore.session.get_session()
client = session.create_client('s3')
try:
    client.get_object(Bucket=BUCKET, Key=FILE)
except NoSuchKey as e:
    print >> sys.stderr, "no such key in bucket"
Run Code Online (Sandbox Code Playgroud)

但NoSuchKey没有定义,我无法将其跟踪到我需要定义的导入.

e.__class__botocore.errorfactory.NoSuchKey,但from botocore.errorfactory import NoSuchKey给出了一个错误,from botocore.errorfactory import *也不管用,我不希望捕捉一般错误.

python botocore

68
推荐指数
4
解决办法
2万
查看次数

如何轻松确定Boto 3 S3存储桶资源是否存在?

例如,我有这个代码:

import boto3

s3 = boto3.resource('s3')

bucket = s3.Bucket('my-bucket-name')

# Does it exist???
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services boto3

32
推荐指数
4
解决办法
3万
查看次数

如何使用python上传S3空的子文件夹

下面的代码工作正常,除非有一个子文件夹,里面没有任何文件,那么子文件夹将不会出现在S3中.例如,如果/ home/temp/subfolder没有文件,那么子文件夹将不会显示在S3中.如何更改代码以便在S3中也上传空文件夹?我试着写... (请参阅下面的注释),但不知道如何将put_object()调用到空子文件夹.

#!/usr/bin/env python
import os
from boto3.session import Session

path = "/home/temp"
session = Session(aws_access_key_id='XXX', aws_secret_access_key='XXX')
s3 = session.resource('s3')

for subdir, dirs, files in os.walk(path):
    # note: if not files ......
    for file in files:
        full_path = os.path.join(subdir, file)
        with open(full_path, 'rb') as data:

s3.Bucket('my_bucket').put_object(Key=full_path[len(path)+1:],    
Body=data)
Run Code Online (Sandbox Code Playgroud)

此外,我试图调用此函数来检查子文件夹或文件是否存在.它适用于文件,但不适用于子文件夹.如何检查子文件夹是否存在?(如果存在子文件夹,我将不会上传)

def check_exist(s3, bucket, key):
    try:
        s3.Object(bucket, key).load()
    except botocore.exceptions.ClientError as e:
        return False
    return True
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我参考上面的代码

使用boto3检查s3中存储桶中是否存在密钥

http://www.developerfiles.com/upload-files-to-s3-with-python-keeping-the-original-folder-structure/

感谢他们分享代码.

python amazon-web-services boto3

0
推荐指数
1
解决办法
805
查看次数

标签 统计

python ×3

amazon-web-services ×2

boto3 ×2

amazon-s3 ×1

botocore ×1