gpt4 book ai didi

python - PyPDF2 问题和从 S3 解码 pdf 文件

转载 作者:行者123 更新时间:2023-12-02 17:12:25 24 4
gpt4 key购买 nike

我正在尝试将一个 pdf 文件存储在我在 AWS 中的一个 S3 存储桶中,并获取它的一些元数据,例如页数和文件大小。我成功地从 S3 存储桶中获取了 pdf 文件,在调用 print(obj) 时获取了这个文件

s3.Object(bucket_name='somebucketname', key='somefilename.pdf')

使用 PyPDF2.PdfFileReader() 时,我尝试使用原始文件、UTF-8 解码文件和 ISO-8859-1 解码文件。 ISO-8859-1 解码文件是唯一没有引发异常的文件,但是当试图将它作为参数传递给 PdfFileReader 时,我得到了一个错误,这个回溯

Traceback (most recent call last):
File "s3_test.py", line 18, in <module>
pdfFile = PdfFileReader(parse3)
File "/usr/local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1081, in __init__
fileobj = open(stream, 'rb')
ValueError: embedded null byte

我是不是使用了错误的编码类型来解码这个 pdf 文件,还是像 pdfFileReader 的第一个参数必须是文件路径这样的东西?有没有更简单的方法来访问 S3 pdf 对象的元数据,而无需绕过圈子到达那里?

Python 脚本

import boto3
from PyPDF2 import PdfReader

s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, itemname)
parse3 = obj.get()['Body'].read().decode("ISO-8859-1")
pdfFile = PdfReader(parse3)

最佳答案

总体策略如下:

  1. 让 PyPDF2 处理解码

PyPDF2 会比您更聪明地决定如何解码文件。 PdfFileReader 可以从流或文件路径读取,因此可以从 S3 读取文件并将其准备为字节流。让 PdfFileReader 完成艰苦的工作。

  1. 准备字节流

要将文件流准备为字节流,您可以使用 BytesIO 库。

python 2:

from BytesIO import BytesIO

python 3:

from io import BytesIO

对于您的代码示例:

from io import BytesIO

import boto3
from PyPDF2 import PdfReader


s3 = boto3.resource("s3")
obj = s3.Object(bucket_name, itemname)
fs = obj.get()["Body"].read()
reader = PdfReader(BytesIO(fs))

关于python - PyPDF2 问题和从 S3 解码 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48373967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com