英文:
create a new folder everyday as per UTC time in my s3 bucket and save json files in it
问题
错误提示表明's3.ServiceResource'对象没有'head_bucket'或'head_object'属性。这是因为在Boto3版本中,没有这些方法。要解决这个问题,你可以使用boto3.client
对象来执行这些操作,而不是使用s3.resource
对象。
以下是修正后的代码:
import pytz
import datetime
import boto3
# 创建S3客户端
s3 = boto3.client('s3')
# S3桶的名称
bucket_name = 'my_data'
# 获取当前UTC时间
utc_now = datetime.datetime.now(pytz.utc)
today = utc_now.strftime("%Y-%m-%d")
folder_name = "json_files_" + today
# 检查今天的文件夹是否已经存在
try:
s3.head_object(Bucket=bucket_name, Key=folder_name + "/")
except s3.exceptions.ClientError as e:
# 如果文件夹不存在,创建它
if e.response["Error"]["Code"] == "404":
s3.put_object(Bucket=bucket_name, Key=folder_name + "/")
else:
# 抛出其他错误
raise
# 你的字典数据
my_dict = {"id": "0"}
# 创建JSON文件的键
key = folder_name + "/" + str(my_dict["id"]) + ".json"
print('key -> ', key)
# 上传字典数据到S3
s3.put_object(Bucket=bucket_name, Key=key, Body=json.dumps(my_dict))
这个代码使用boto3.client
来执行S3操作,修复了你的问题。如果还有其他问题,你可以在这里提出,我会帮助你解决。
英文:
I want to create a new folder everyday as per UTC time in my s3 bucket, the dict should be saved in json format in that folder
My_Attempt
import pytz
import datetime
import botocore
import boto3
s3 = session.resource('s3')
config['S3_BUCKET'] = 'my_data'
# Get the current date and time in UTC
utc_now = datetime.datetime.now(pytz.utc)
today = utc_now.strftime("%Y-%m-%d")
folder_name = "json_files_" + today
my_array = '{"id": "0"}'
# Check if the folder for today already exists
try:
s3.head_bucket(Bucket=config['S3_BUCKET'], Key=folder_name + "/") #head_object(Bucket=config['S3_BUCKET'], Key=folder_name + "/")
except botocore.exceptions.ClientError as e: #boto3.exceptions.ClientError as e: #s3.exceptions.ClientError as e:
# If the folder does not exist, create it
if e.response["Error"]["Code"] == "404":
s3.put_object(Bucket=config['S3_BUCKET'], Key=folder_name + "/")
else:
# Raise any other errors
raise
key = folder_name + "/" + str(my_array['id']) + ".json"
print('key -> ',key)
s3.put_object(Bucket="my-bucket", Key=key, Body=my_array)
ERROR
I tried both 'head_bucket' and 'head_object'
's3.ServiceResource' object has no attribute 'head_bucket'
's3.ServiceResource' object has no attribute 'head_object'
How can I improve the code and debug the code?
答案1
得分: 0
我将s3 = session.resource('s3')
替换为s3 = session.client('s3')
,如@Anon Conward建议的那样,它有效。
英文:
I replaced s3 = session.resource('s3')
with s3 = session.client('s3')
and it works as suggested by @Anon Conward
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论