【发布时间】:2020-02-07 02:24:47
【问题描述】:
我必须将一个文件夹从我的本地移动到 s3。 我想知道是否有办法这样做。
我的文件夹包含嵌套的子文件夹,其中包含文件(通常是 .pdf 或 .doc 或 docx)。
我知道我可以使用 s3fs (https://s3fs.readthedocs.io/en/latest/api.html) 将单个文件从本地移动到 s3:
S3FileSystem.put(filename, path, **kwargs) Stream data from local filename to file at path
我的代码看起来像
def upload_data(filepath, file_name):
s3 = s3fs.S3FileSystem()
s3_path = f"name-of-my-bucket/{file_name}"
s3.put(filepath, s3_path)
但是这允许我上传单个文件。我想发送整个文件夹。
我可以递归地做,一个一个地添加每个文件,但是:
1) 我认为如果我可以发送文件夹会更容易。
2) 维护文件夹的结构会更加困难。这意味着我的本地文件 folders/subfolders/myfile.pdf 将在 s3 中保存为 mypdf.pdf 而不是 folders/subfolders/myfile.pdf
【问题讨论】:
-
旁注:
s3fs不是使用 Amazon S3 的标准方式。推荐使用 boto3,它是适用于 Python 的官方 AWS 开发工具包。没有 AWS API 调用来移动多个文件,因此 @Seth 建议使用 AWS Command-Line Interface (CLI),它具有移动多个文件的递归代码。或者,您可以简单地遍历输入文件并将每个文件复制到 S3。 S3中不需要创建目标目录,指定完整的目标路径即可。