gpt4 book ai didi

Python3 PyPDF2 - 如何将文件处理程序视为 BytesIO 对象?

转载 作者:行者123 更新时间:2023-11-29 12:07:35 25 4
gpt4 key购买 nike

有一段不错的、经过测试的 python PyPDF2 代码,一个 .py 设计用于在“真实”操作系统文件上运行。调试完所有内容后,我现在正尝试将其合并到 plPython 函数中,用 io.BytesIO() 替换文件 - 或者任何最适合无缝插入的机制......

文件读/写现在将是 PostgreSQL bytea cols。 “in”中的文档已使用 PG 复制功能写入 - 字节数与磁盘大小相匹配;到目前为止一切顺利。

原始代码预期文件:

# infile = "myInputPdf.pdf"
# outfile = "myOutputPdf.pdf"

# inputStream = open(infile, "rb") # designed to open OS-based file
# --- Instead: 'document_in' loaded from PG bytea col:
inputStream = io.BytesIO(document_in)
# ---
pdf_reader = PdfFileReader(inputStream, strict=False)
# (lots of code in here, seems? to be working)
outputStream = io.BytesIO() # trying it the python3 way!
pdf_writer.write(outputStream)

(我假设对象应该被视为字节对象)

最后:

plan3 = plpy.prepare("UPDATE documents SET document_out=$2 WHERE name=$1", ["varchar"]["varchar"])
ERROR: TypeError: list indices must be integers, not str

(PostgreSQL 11.1,如果重要的话)

过去使用 mkstemp 技术做过类似的事情;现在正努力成长为字节世界!

最佳答案

plpy.prepare() 中的第二个参数是一个列表。列类型是 bytea,而不是 varchar。并且您应该使用 bytes(不是文件对象)来更新列:

plan3 = plpy.prepare("UPDATE documents SET document_out=$2 WHERE name=$1", ["varchar", "bytea"])
outputStream.seek(0)
bytes_out = outputStream.read()
plpy.execute(plan3, ['some name', bytes_out])

关于Python3 PyPDF2 - 如何将文件处理程序视为 BytesIO 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54013708/

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