gpt4 book ai didi

python - 请求 : Return file object from url (as with open ('' ,'rb' ) )

转载 作者:太空狗 更新时间:2023-10-29 18:18:39 24 4
gpt4 key购买 nike

我想使用 requests 将文件直接下载到内存中,以便将其直接传递给 PyPDF2 阅读器,避免将其写入磁盘,但我无法弄清楚如何将其作为 文件对象 传递。这是我尝试过的:

import requests as req
from PyPDF2 import PdfFileReader

r_file = req.get('http://www.location.come/somefile.pdf')
rs_file = req.get('http://www.location.come/somefile.pdf', stream=True)

with open('/location/somefile.pdf', 'wb') as f:
for chunk in r_file.iter_content():
f.write(chunk)

local_file = open('/location/somefile.pdf', 'rb')

#Works:
pdf = PdfFileReader(local_file)

#As expected, these don't work:
pdf = PdfFileReader(rs_file)
pdf = PdfFileReader(r_file)
pdf = PdfFileReader(rs_file.content)
pdf = PdfFileReader(r_file.content)
pdf = PdfFileReader(rs_file.raw)
pdf = PdfFileReader(r_file.raw)

最佳答案

无需了解有关请求的任何知识,您始终可以使用StringIO将内存中的任何内容作为字符串创建一个类似文件的对象。

特别是:

  • Python 2 StringIO.StringIO(s) 是一个二进制文件。
  • Python 2 cStringIO.StringIO(s) 相同,但效率可能更高。
  • Python 3 io.BytesIO(b) 是一个二进制文件(由 bytes 构造)。
  • Python 3 io.StringIO(s) 是一个 Unicode 文本文件。
  • Python 2 io.BytesIO(s) 是一个二进制文件。
  • Python 2 io.StringIO(u) 是一个 Unicode 文本文件(由 unicode 构建)。

(前两个是 Python 2 意义上的“二进制”——没有行结束转换。其他两个是 Python 3 意义上的“二进制”与“文本”——字节与 Unicode。)

因此,io.BytesIO(response.content) 在 Python 2 和 Python 3 中都为您提供了一个有效的类似二进制文件的对象。如果您只关心 Python 2,cStringIO。 StringIO(response.content) 可能更有效率。

当然,“类文件”仅此而已;例如,如果库尝试调用 fileno 方法并开始对文件描述符进行 C 调用,它将无法工作。但在 99% 的情况下,这是有效的。

关于python - 请求 : Return file object from url (as with open ('' ,'rb' ) ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049285/

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