我需要将一个文件夹从本地移动到s3,想了解是否有方法实现此操作。我的文件夹包含子文件夹和其中的文件(通常为.pdf或.doc或.docx)。我知道可以使用
我可以递归地做到这一点,逐个添加每个文件,但是:
1)如果我能发送整个文件夹,则认为会更容易。
2)它将更难维护文件夹的结构。这意味着我的本地文件
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 SDK。没有AWS API调用来移动多个文件,因此@Seth建议使用 AWS命令行界面(CLI),它具有递归代码以移动多个文件。或者,您可以简单地循环遍历输入文件并将每个文件复制到S3。在S3中不需要创建目标目录,您只需指定完整的目标路径即可。 - John Rotenstein