私は現在、バケット内のS3フォルダ(接頭辞)を開き、そのフォルダの内容(XMLポインタのファイル名)を表示するboto3を使用してPythonスクリプトを作成しています。私が持っているコードは次のとおりです。list_objects_v2()はときどき最初のキー値を正しく返しません
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にアップロードされ、動作しない接頭辞はすべて別の日にアップロードされました。バケット権限の問題なのでしょうか?
if item['Size'] == 0:
pass
else:
print item['Key']
はしかし、私はちょうどそれのように出力である理由を知りたい:私はforループにif文を追加することによって、この問題を回避する方法を考え出した...本当に
わからないんだけどそれ。
ありがとうございます!
...「フォルダ」を作成する場合は、S3コンソールを含めます。 [* "Amazon S3コンソールは、スラッシュ「/」を含むすべてのオブジェクトを、キー名の最後の(末尾の)文字としてフォルダとして扱います(例:' examplekeyname/')。*](http:// docs .aws.amazon.com/AmazonS3/latest/UG/FolderOperations.html)解決策は、存在する場合、これをスキップすることです。 –
非常に有益で有益です。あなたがた両方に感謝します! – Amanda