Python - 在 cloud9 AWS (boto3) 上查找文件路径
Python - Finding path of a file on cloud9 AWS (boto3)
我正在尝试将来自 cloud9 环境的对象放入 S3 存储桶中
该文件位于 IDE 内的同一文件夹中。
我有一个名为 project1 的文件夹,这个脚本和文件在同一个文件夹中
这是我的代码
import logging
import boto3
from botocore.exceptions import ClientError
def put_object(dest_bucket_name, dest_object_name, src_data):
"""
Add an object to an Amazon S3 bucket
The src_data argument must be of type bytes or a string that references
a file specification.
:param dest_bucket_name: string
:param dest_object_name: string
:param src_data: bytes of data or string reference to file spec
:return: True if src_data was added to dest_bucket/dest_object, otherwise
False
"""
# Construct Body= parameter
if isinstance(src_data, bytes):
object_data = src_data
elif isinstance(src_data, str):
try:
object_data = open(src_data, 'rb')
# possible FileNotFoundError/IOError exception
except Exception as e:
logging.error(e)
return False
else:
logging.error('Type of ' + str(type(src_data)) +
' for the argument \'src_data\' is not supported.')
return False
# Put the object
s3 = boto3.client('s3')
try:
s3.put_object(Bucket=dest_bucket_name, Key=dest_object_name, Body=object_data)
except ClientError as e:
# AllAccessDisabled error == bucket not found
# NoSuchKey or InvalidRequest error == (dest bucket/obj == src bucket/obj)
logging.error(e)
return False
finally:
if isinstance(src_data, str):
object_data.close()
return True
def main():
"""Exercise put_object()"""
test_bucket_name = 'BUCKET_NAME'
test_object_name = 'OBJECT_NAME'
filename = 'file.ext'
# Alternatively, specify object contents using bytes.
# filename = b'This is the data to store in the S3 object.'
# Set up logging
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)s: %(asctime)s: %(message)s')
# Put the object into the bucket
success = put_object(test_bucket_name, test_object_name, filename)
if success:
logging.info(f'Added {test_object_name} to {test_bucket_name}')
if __name__ == '__main__':
main()
是否可以将文件从 IDE 放入 S3 存储桶?
Is it possible to put the file from the IDE to the S3 bucket?
是的。如果你知道它的相对路径,你可以使用常规 boto3 的方法将文件上传到 s3,假设你有访问 s3 的权限。
如果您不确定脚本中当前的工作目录是什么,您可以使用
import os
print(os.getcwd())
显然您可以使用 os.getcwd()
来构建脚本的完整路径,例如:
os.getcwd()/file/to/upload/to/s3.txt
我正在尝试将来自 cloud9 环境的对象放入 S3 存储桶中 该文件位于 IDE 内的同一文件夹中。 我有一个名为 project1 的文件夹,这个脚本和文件在同一个文件夹中 这是我的代码
import logging
import boto3
from botocore.exceptions import ClientError
def put_object(dest_bucket_name, dest_object_name, src_data):
"""
Add an object to an Amazon S3 bucket
The src_data argument must be of type bytes or a string that references
a file specification.
:param dest_bucket_name: string
:param dest_object_name: string
:param src_data: bytes of data or string reference to file spec
:return: True if src_data was added to dest_bucket/dest_object, otherwise
False
"""
# Construct Body= parameter
if isinstance(src_data, bytes):
object_data = src_data
elif isinstance(src_data, str):
try:
object_data = open(src_data, 'rb')
# possible FileNotFoundError/IOError exception
except Exception as e:
logging.error(e)
return False
else:
logging.error('Type of ' + str(type(src_data)) +
' for the argument \'src_data\' is not supported.')
return False
# Put the object
s3 = boto3.client('s3')
try:
s3.put_object(Bucket=dest_bucket_name, Key=dest_object_name, Body=object_data)
except ClientError as e:
# AllAccessDisabled error == bucket not found
# NoSuchKey or InvalidRequest error == (dest bucket/obj == src bucket/obj)
logging.error(e)
return False
finally:
if isinstance(src_data, str):
object_data.close()
return True
def main():
"""Exercise put_object()"""
test_bucket_name = 'BUCKET_NAME'
test_object_name = 'OBJECT_NAME'
filename = 'file.ext'
# Alternatively, specify object contents using bytes.
# filename = b'This is the data to store in the S3 object.'
# Set up logging
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)s: %(asctime)s: %(message)s')
# Put the object into the bucket
success = put_object(test_bucket_name, test_object_name, filename)
if success:
logging.info(f'Added {test_object_name} to {test_bucket_name}')
if __name__ == '__main__':
main()
是否可以将文件从 IDE 放入 S3 存储桶?
Is it possible to put the file from the IDE to the S3 bucket?
是的。如果你知道它的相对路径,你可以使用常规 boto3 的方法将文件上传到 s3,假设你有访问 s3 的权限。
如果您不确定脚本中当前的工作目录是什么,您可以使用
import os
print(os.getcwd())
显然您可以使用 os.getcwd()
来构建脚本的完整路径,例如:
os.getcwd()/file/to/upload/to/s3.txt