質問編集履歴

2

コード修正

2022/11/09 09:03

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- S3バケットから全リストを取得して特定ファイルを開けるようにしたい
1
+ 特定ファイルを開けるようにしたい
test CHANGED
@@ -1,42 +1,7 @@
1
1
  ### 前提・実現したいこと
2
2
  表題の通り、S3とLambda(Python3.9)を使い、特定バケットからフォルダをアップロードした際に特定ファイル(open.txt)を開いて値を出力するようにしたいです。
3
3
  (アクセス権限関連は全て許可済みです。)
4
- 以下コードでフォルダをアップロードした際にフォルダ内の全リストを取得できました。
5
- ```
6
- import json
7
- import boto3
8
-
9
- BUCKET_NAME = 'bucket'
10
4
 
11
- def lambda_handler(event, context):
12
- s3c = boto3.client('s3')
13
- next_token = ''
14
- while True:
15
- if next_token == '':
16
- response = s3c.list_objects_v2(Bucket=BUCKET_NAME)
17
- else:
18
- response = s3c.list_objects_v2(Bucket=BUCKET_NAME, ContinuationToken=next_token)
19
- for content in response['Contents']:
20
- keyn = content['Key']
21
- prt = keyn.split('/')
22
- print(prt)
23
-
24
- if 'NextContinuationToken' in response:
25
- next_token = response['NextContinuationToken']
26
- else:
27
- break
28
- ```
29
-
30
- Cloudwatchからの出力結果(RequestIdは省略)
31
- ```
32
- START RequestId: ********************* Version: $LATEST
33
-
34
- ['sample', 'sample.pdf']
35
-
36
- ['sample', 'open.txt']
37
-
38
- END RequestId: *********************
39
- ```
40
5
  ※アップロードしたフォルダ構成
41
6
  sample
42
7
  |_AAAA.pdf
@@ -45,34 +10,12 @@
45
10
 
46
11
  ### 発生している問題・エラーメッセージ
47
12
  17行目の「print(prt)」以降に以下コードを追加しました。
48
- ```
49
- ...
50
- for content in response['Contents']:
51
- keyn = content['Key']
52
- prt = keyn.split('/')
53
- print(prt)
54
-
55
- body = prt.read()
56
- bodystr = body.decode('utf-8')
57
- data = bodystr.split('\n')[10]
58
- print(data)
59
- ...
60
- ```
61
13
  やりたいこととしては['sample', 'open.txt']と出力されたのでここの'open.txt'を開いて
62
14
  open.txtに記載されている10行目を出力したいと思います。
63
15
  ただこの場合だと以下エラーが表示されました。
64
- ```
65
- ['sample', 'AAAA.pdf']
66
16
 
67
- [ERROR] AttributeError: 'list' object has no attribute 'read' Traceback (most recent call last): File "/var/task/lambda_function.py", line 19, in lambda_handler body = prt.read()
68
-
69
- END RequestId: *********************************
70
-
71
- ```
72
17
  最初のpdfファイルを読み込むような処理をしている(?)のかはわからないですが
73
18
  エラー原因、対処方法がわからないので教えて頂ければと思います。
74
19
 
75
20
  ### 補足情報(FW/ツールのバージョンなど)
76
21
 
77
- Python3.9,AWS Lambda
78
-

1

コード修正

2022/11/06 06:05

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -39,7 +39,7 @@
39
39
  ```
40
40
  ※アップロードしたフォルダ構成
41
41
  sample
42
- |_sample.pdf
42
+ |_AAAA.pdf
43
43
  |_open.txt
44
44
 
45
45
 
@@ -62,7 +62,7 @@
62
62
  open.txtに記載されている10行目を出力したいと思います。
63
63
  ただこの場合だと以下エラーが表示されました。
64
64
  ```
65
- ['sample', 'sample.pdf']
65
+ ['sample', 'AAAA.pdf']
66
66
 
67
67
  [ERROR] AttributeError: 'list' object has no attribute 'read' Traceback (most recent call last): File "/var/task/lambda_function.py", line 19, in lambda_handler body = prt.read()
68
68