質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1397閲覧

S3バケットで任意フォルダからファイル読み込みのやり方がわからないです

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2022/11/04 02:52

前提

フォルダをS3バケットへアップロードし、そこから特定階層のテキストファイルを読み込むコードを作成しています。
現在作成中のコードは以下通りです。(S3へのアクセス権限関連はすべて許可済みです。)

import boto3 def lambda_handler(event, context): s3 = boto3.client('s3') bucket_name = 'bucket' file_name = 'open.txt' S3KeyPrefix = 'sample/' response = s3.get_object(Bucket=bucket_name, Key=S3KeyPrefix + file_name) body = response['Body'].read() bodystr = body.decode('utf-8') data = bodystr.split('\n')[10] print(data)

上記ですとsampleフォルダをアップロードした際、フォルダ中に含まれている「open.txt」の10行目を読み込んで出力するコードとなります。

実現したいこと

S3KeyPrefixにフォルダを指定していますが、フォルダの名称は固定ではありません。
ただし、1階層下に必ずopen.txtがフォルダに含まれています。
なのでフォルダの名称に関係なくtxtファイルの読み込みをしたいと思います。

試したこと

https://hacknote.jp/archives/20100/
ここに記載されている通り、特定フォルダを指定する方法をPrefixで指定すればいいのかとは思いますが、
何をどうやって指定するのかが分からない段階です。
実現させるためにどのようにすればいいのかご教授いただければ幸いです。
(その他に有効な手段があれば教えていただければと思います。)

補足情報(FW/ツールのバージョンなど)

Python 3.9 , AWS lambda

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ここに記載されている通り、特定フォルダを指定する方法をPrefixで指定すればいいのかとは思いますが、

いえ、逆にprefixなどは何も指定せずに全リストを取得して、その中からopen.txtを探す、という形にするのが妥当かと思います。

S3のAPIで、末尾部分を条件として対象ファイルを絞り込む方法はなさそうです。

投稿2022/11/04 05:48

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/11/04 09:57

ありがとうございます。 全取得する方法というアドバイスを受け以下のように修正しました。 def lambda_handler(event, context): s3c = boto3.client('s3') next_token = '' while True: if next_token == '': response = s3c.list_objects_v2(Bucket=BUCKET_NAME) else: response = s3c.list_objects_v2(Bucket=BUCKET_NAME, ContinuationToken=next_token) for content in response['Contents']: keyn = content['Key'] prt = keyn.split('/') print(prt) これでアップロードされたファイルを全取得していることを確認できました。 あとはこの中でopen.txtを指定してファイルを開く方法ですが こちらは別問題になりそうなので別に質問として投稿しようと思います。 解決策が見つかったという頃で一旦はクローズにしようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問