use*_*955 0 python amazon-web-services boto3
下面的代码工作正常,除非有一个子文件夹,里面没有任何文件,那么子文件夹将不会出现在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)
顺便说一下,我参考上面的代码
和
http://www.developerfiles.com/upload-files-to-s3-with-python-keeping-the-original-folder-structure/
感谢他们分享代码.
S3中不存在目录(文件夹,子文件夹等).
将此文件复制到空S3存储桶时/mydir/myfile.txt,只将文件myfile.txt复制到S3.mydir未创建该目录,因为该字符串是文件名的一部分mydir/myfile.txt.实际文件名是完整路径,不存在或创建子目录.
S3在列表中列出文件时使用前缀模拟目录.如果指定mydir/,则将返回所有以#开头的S3对象,mydir/包括诸如的对象mydir/anotherfolder/myotherfile.txt.S3支持分隔符,/以便可以创建子目录的外观.
注意:/S3对象的文件名开头没有.
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |