Python 3.x 使用boto3(Python3.x)将文件上载到aws s3 bucket以维护文件结构?

Python 3.x 使用boto3(Python3.x)将文件上载到aws s3 bucket以维护文件结构?,python-3.x,boto3,Python 3.x,Boto3,我想把文件从磁盘上传到aws s3 bucket,保持不同的文件夹结构。我可以制作与磁盘相同的结构,但需要在结构上稍作更改 磁盘上的文件夹结构是:/home/userdata/upload\u folder/upload\u file 我想在aws bucket上维护的folderkey结构是: /userdata/uploaded_folder/uploaded_file/ 我当前的代码如下: from boto.s3.connection import S3Connection from

我想把文件从磁盘上传到aws s3 bucket,保持不同的文件夹结构。我可以制作与磁盘相同的结构,但需要在结构上稍作更改

磁盘上的文件夹结构是:/home/userdata/upload\u folder/upload\u file

我想在aws bucket上维护的folderkey结构是:

/userdata/uploaded_folder/uploaded_file/ 
我当前的代码如下:

from boto.s3.connection import S3Connection
from boto.s3.key import Key
import os

conn = S3Connection()
path = '/home/userdata/'
bucket = conn.get_bucket('myBuck')

for root, dirs, files in os.walk(path):
    for name in files:
        #print(root)
        path = root.split(os.path.sep)[1:]
        path.append(name)
        #print(path)
        key_id = os.path.join(*path)
        k = Key(bucket)
        k.key = key_id
        #print(key_id)
        #k.set_contents_from_filename(os.path.join(root, name))
上述代码构成了铲斗中的精确结构。如何更改路径?

正确的行

path = root.split(os.path.sep)[1:]


root.splitos.path.sep中的第一个元素不是“home”

是的,我试过了,但后来无法使用路径。如果将path与最后一行k.set\U contents\U from\U filenameos.path.joinroot,name一起使用,则会出现错误。试着用path代替root,它不会起作用。基本上要做的事情是这样的:s3.upload\u filedisk\u path,bucket\u name,full\u path\u to\u s3。我无法做到这一点。
path = root.split(os.path.sep)[2:]