【发布时间】:2022-01-18 22:08:57
【问题描述】:
我想将文件从子文件夹复制到同一个 s3 存储桶中的另一个子文件夹中。我在 SO 中阅读了很多问题,最后我得到了这段代码。它有一个问题,当我运行它时它可以工作,但它不只复制文件,它会将包含文件的文件夹复制到我想要的目标位置,但在文件夹(根)中。如何只复制该子文件夹内的文件?
XXXBUCKETNAME:
-- XXXX-input/ # I want to copy from here
-- XXXX-archive/ # to here
import boto3
from botocore.config import Config
s3 = boto3.resource('s3', config=Config(proxies={'https': getProperty('Proxy', 'Proxy.Host')}))
bucket_obj = s3.Bucket('XXX')
destbucket = 'XXX'
jsonfiles = []
for obj in bucket_obj.objects.filter(Delimiter='/', Prefix='XXXX-input/', ):
if obj.key.endswith('json'):
jsonfiles.append(obj.key)
for k in jsonfiles:
if k.split("_")[-1:][0] == "xxx.txt":
dest = s3.Bucket(destbucket)
source= { 'Bucket' : destbucket, 'Key': k}
dest.copy(source, "XXXX-archive/"+k)
它给:
XXXBUCKETNAME:
-- XXXX-input/
-- XXXX-archive/
-- XXXX-input/file.txt
我想要:
XXXBUCKETNAME:
-- XXXX-input/
-- XXXX-archive/
-- file.txt
【问题讨论】:
-
在您调用
dest.copy之前打印"XXXX-archive/"+k的值可以明确问题所在。 -
我知道有桶和对象而不是文件夹。
-
我是说复制命令中目标的简单调试日志会告诉您其值为
XXXX-archive/XXXX-input/file.txt。 -
啊,好吧,我当然打印了,但我的脑海中缺少对象的概念。
标签: amazon-web-services amazon-s3 boto3 boto