【发布时间】:2016-10-19 01:46:30
【问题描述】:
我目前正在使用 boto3 编写一个 Python 脚本,该脚本在存储桶中打开一个 S3 文件夹(前缀)并打印出该文件夹的内容(XML 指针文件名)。我的代码是这样的:
def getXMLFileName(self, bucketName, prefix):
session = boto3.Session(profile_name=self.profileName)
s3client = session.client('s3')
try:
for item in s3client.list_objects_v2(Bucket = bucketName, Prefix = prefix, MaxKeys = 5)['Contents']:
print item['Key']
以下代码确实有效。它将打印类似以下内容:
PrefixName/This.Is.The.XML.Filename1.xml
PrefixName/This.Is.The.XML.Filename2.xml
PrefixName/This.Is.The.XML.Filename3.xml
PrefixName/This.Is.The.XML.Filename4.xml
PrefixName/This.Is.The.XML.Filename5.xml
但是,根据我输入的前缀,有些会打印我上面的内容,这是正确的,但其他时候它只会打印出第一项的前缀名称(即 PrefixName/),然后打印出来正确的其余文件。所以在这种情况下,它会打印:
PrefixName/
PrefixName/This.Is.The.XML.Filename1.xml
PrefixName/This.Is.The.XML.Filename2.xml
PrefixName/This.Is.The.XML.Filename3.xml
PrefixName/This.Is.The.XML.Filename4.xml
我不太确定它为什么会这样做。我花了至少 2 天的时间试图弄清楚为什么它为某些存储桶文件夹返回一个“空”文件名,但其他的却有效。不确定它是否相关,但可以工作的前缀都在同一天上传到 S3,而那些不工作的前缀都是在不同的日子上传的。也许这是一个存储桶权限问题?我真的不确定...
我已经通过在 for 循环中添加 if 语句找到了解决此问题的方法:
if item['Size'] == 0:
pass
else:
print item['Key']
但是,我只想知道为什么会这样输出。
提前致谢!
【问题讨论】: