ファイルを複数の小さなファイルに分割しようとしていますが、lamdbaを使用せずに1つのファイルに対してロジックがうまく動作します。ループを完了せずに、ファイルを間違って書き込みます。中/大型ファイルAWSラムダPython分割ファイルを小さなファイルに分割すると、無限ループで実行される
ファイル土地/及びlamdba:これまでのforループの外に一つだけのトリガー
ロジックフローを開始したファイルがあるにもかかわらず、数回実行しようとする私のデバッグに基づき
トリガーおよびロジックに基づいてファイルを分割しようとすると、中/ splitfiles/
ファイル内容の小さなファイルを配置します:
ABC | filename1.DAT | 123
CDE | filename2.DAT | 8910
XYZ | filename3.DAT | 456
FGH | filename4.DAT | 4545
O/P
はFile1:
ABC | filename1.DAT | 123
CDE | filename2.dat | 8910
ファイル2:
XYZ | filename3.DAT | 456
FGH | filename4.DAT | 4545
コード:
import boto3
import os
s3client = boto3.client('s3')
s3 = boto3.resource('s3')
def lambda_handler(event, context):
try:
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
print(key)
obj = s3.Object(bucket, key)
linesplit = obj.get()['Body'].read().split('\n')
lines_per_file=2 #number of lines per file
created_files = 0
sfilelines=''
for rownum,line in enumerate(linesplit,start=1):
sfilelines = sfilelines + '\n' + line
if rownum%lines_per_file == 0:
cnt = lines_per_file * (created_files + 1)
body_contents = str(sfilelines)
file_name = "%s_%s.DAT" % ('Testfile', cnt)
target_file = "splitfiles/" + file_name
print(target_file)
s3client.put_object(ACL='public-read', ServerSideEncryption='AES256', Bucket=bucket, Key=target_file,
Body=body_contents)
sfilelines = '' # Reset variables
created_files += 1 # One more small file has been created
if rownum: # to get the pending lines that is not written
cnt = lines_per_file * (created_files + 1)
body_contents = str(sfilelines)
file_name = "%s_%s.DAT" % ('Testfile', cnt)
target_file = "splitfiles/" + file_name
print(target_file)
s3client.put_object(ACL='public-read', ServerSideEncryption='AES256', Bucket=bucket, Key=target_file,
Body=body_contents)
created_files += 1
print ('%s split files (with <= %s lines each) were created.' % (created_files,lines_per_file))
except Exception as e:
print e
同じファイルの各呼び出しで 'context'の内容を共有できますか?ラムダトリガーをどのように定義したかによって、1つのファイルにつき複数のラムダ起動、つまり異なるS3オブジェクトライフサイクルイベントが発生している可能性があります。 –
入力していただきありがとうございます。トリガーを修正しても問題ありません。 – Rajeev
これを正解にして受け入れることができます! –