[英]Reading .mdb or .accdb file from s3 bucket in AWS lambda function and converting it into excel or csv using python
[英]Creating an AWS lambda function to split pdf files in a s3 bucket
我想写一个 AWS Lambda function :
从 s3 存储桶中取出 pdf 文件 -> 拆分 pdf 文件 -> 将拆分文件存储到 S3 存储桶。
我正在使用 PyPDF 模块,所以我还需要知道如何在 aws lambda function 中使用它。
拆分pdf个文件的代码:
import os
from PyPDF2 import PdfFileReader, PdfFileWriter
pdf_file_path = 'filename.pdf'
file_base_name = pdf_file_path.replace('.pdf','')
output_folder_path = os.path.join(os.getcwd(), 'output')
pdf = PdfFileReader(pdf_file_path)
for page_num in range(pdf.numPages):
pdfWriter = PdfFileWriter()
pdfWriter.addPage(pdf.getPage(page_num))
with open(os.path.join(output_folder_path, '{0}_Page{1}.pdf'.format(file_base_name,page_num+1)), 'wb') as f:
pdfWriter.write(f)
f.close()
我的 lambda function 应该是什么?(代码)
您的 lambda 代码需要看起来像这样。 在这种情况下,我正在使用 boto3 读取 S3 文件。 您在活动中将 arguments 传递给您的 lambda function。
import boto3
from content_reader_lambda.pdf import reader
def read_pdf_from_bucket(event, context):
bucket_name = event['bucket_name']
file_name = event['file_name']
s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, file_name)
s3_file = obj.get()['Body'].read()
return reader.pdf_as_text(s3_file, 'pdf')
我正在使用 pymupdf 读取 PDF 并返回这样的文本。
def pdf_as_text(file_stream, filetype):
text = ''
with fitz.open(stream=file_stream, filetype=filetype) as doc:
for page in doc:
# Sort reads the text in display/reading order. https://pymupdf.readthedocs.io/en/latest/page.html#Page.get_textpage
text+= page.get_text('text', sort=True)
return text
您可以将其替换为您的代码并使用 boto3 将您的 PDF 写回 S3。
将您的 lambda 与您使用的第三方库一起部署到 AWS 是一个完全不同的主题。 为此,我建议使用图层。 鉴于 AWS 大小限制,较小的库更容易部署。
pypdf
可以使用文件流(文档):
读:
from io import BytesIO
# Prepare example
with open("example.pdf", "rb") as fh:
bytes_stream = BytesIO(fh.read())
# Read from bytes_stream
reader = PdfReader(bytes_stream)
# Write to bytes_stream
writer = PdfWriter()
with BytesIO() as bytes_stream:
writer.write(bytes_stream)
写作:
from io import BytesIO
import boto3
from pypdf import PdfReader, PdfWriter
reader = PdfReader(BytesIO(raw_bytes_data))
writer = PdfWriter()
# Add all pages to the writer
for page in reader.pages:
writer.add_page(page)
# Add a password to the new PDF
writer.encrypt("my-secret-password")
# Save the new PDF to a file
with BytesIO() as bytes_stream:
writer.write(bytes_stream)
bytes_stream.seek(0)
s3 = boto3.client("s3")
s3.write_get_object_response(
Body=bytes_stream, RequestRoute=request_route, RequestToken=request_token
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.