gpt4 book ai didi

python - 将 PDF 文件(或任何二进制文件)转换为 python 中的字符串(不是从 pdf 中获取文本)

转载 作者:行者123 更新时间:2023-12-01 21:57:00 33 4
gpt4 key购买 nike

我正在使用一个只接受字符串的 api。它的目的是存储东西。我希望能够读取二进制文件,将二进制数据转换为字符串,然后存储该字符串。然后我想检索字符串,转换回二进制并保存文件。

所以我想做的是(在 python 中):

PDF -> 以字符串形式加载到程序中 -> 存储字符串 -> 检索字符串 -> 另存为二进制 PDF 文件

例如,我有一个名为 PDFfile 的 PDF。我想阅读它:

datafile=open(PDFfile,'rb')
pdfdata=datafile.read()

当我阅读 .read 函数时,它说它应该产生一个字符串。它没有,或者如果有,它也采用将其定义为二进制文件的部分。稍后我有两行代码将其打印出来:

print(pdfdata[:20])
print(str(pdfdata[:20]))

结果是这样的:

b'%PDF-1.3\n%\xc4\xe5\xf2\xe5\xeb\xa7\xf3\xa0\xd0\xc4'
b'%PDF-1.3\n%\xc4\xe5\xf2\xe5\xeb\xa7\xf3\xa0\xd0\xc4'

那些对我来说看起来像 2 字节类型,但显然,第二个是字符串。当我执行 type(pdfdata) 时,我得到了字节。

我正在努力尝试获得一个代表 PDF 文件的干净字符串,然后我可以将其转换回字节格式。如果我发送它而不对其进行字符串化,API 将失败。

str(pdfdata)

我也尝试过编码和解码,但我得到的错误是编码/解码无法处理显然在二进制文件中的 0xc4。

最后的怪事:

当我存储 str(pdfdata) 并将其检索到“retdata”时,我从中打印出一些字节并与原始数据进行比较

print(pdfdata[:20])
print(retdata[:20])

我得到了完全不同的结果

b'%PDF-1.3\n%\xc4\xe5\xf2\xe5\xeb\xa7\xf3\xa0\xd0\xc4'
b'%PDF-1.3\n%\xc4\xe

但是如果我显示 retdata 的 50 个字符,数据就在那里

b'%PDF-1.3\n%\xc4\xe5\xf2\xe5\xeb\xa7\xf3\xa0\xd0\

不用说,当我检索数据并将其存储为 pdf 时,它已损坏且无法正常工作。

当我保存字符串化的 pdf 和检索到的数据的字符串版本时,它们是相同的。所以字符串的存储和检索工作正常。

所以我认为当我转换为字符串时会发生损坏。

我知道我很啰嗦,但你们喜欢了解所有信息。

最佳答案

好的,我让它工作了。关键是在将二进制数据转换为字符串之前对其进行正确编码。

第一步)读入二进制数据

datafile=open(PDFfile,'rb')
pdfdatab=datafile.read() #this is binary data
datafile.close()

第 2 步)将数据编码为字节数组

import codecs
b64PDF = codecs.encode(pdfdatab, 'base64')

第 3 步)将字节数组转换为字符串

Sb64PDF=b64PDF.decode('utf-8')

现在可以恢复字符串了。要取回它,您只需执行相反的操作即可。将字符串数据从存储加载到字符串变量 retdata。

#so we have a string and want it to be bytes
bretdata=retdata.encode('utf-8')

#now lets get it back into the binary file format
bPDFout=codecs.decode(bretdata, 'base64')

#open a new file and put defragments data into it!
datafile=open(newPDFFile,'wb')
datafile.write(bPDFout)
datafile.close()

关于python - 将 PDF 文件(或任何二进制文件)转换为 python 中的字符串(不是从 pdf 中获取文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56230203/

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