创建后访问bytesIO对象

时间:2016-09-30 20:15:26

标签: python pdf

我正在研究scrapy spider,尝试使用slate(https://pypi.python.org/pypi/slate)在目录中提取多个pdf文本。我没有兴趣将实际的PDF保存到磁盘,因此我建议我在https://docs.python.org/2/library/io.html#buffered-streams查看io.bytesIO子类。基于Creating bytesIO object,我已经用pdf体初始化了bytesIO类,但现在我需要将数据传递给slate模块。到目前为止,我有:

def save_pdf(self, response):
    in_memory_pdf = BytesIO(response.body)

    with open(in_memory_pdf, 'rb') as f:
        doc = slate.PDF(f)
        print(doc[0])

我得到了:

in_memory_pdf.read(response.body)
TypeError: integer argument expected, got 'str'

我怎样才能使这个工作?

编辑:

with open(in_memory_pdf, 'rb') as f:
TypeError: coercing to Unicode: need string or buffer, _io.BytesIO found

编辑2:

def save_pdf(self, response):
    in_memory_pdf = BytesIO(bytes(response.body))
    in_memory_pdf.seek(0)
    doc = slate.PDF(in_memory_pdf)
    print(doc)

1 个答案:

答案 0 :(得分:1)

你已经知道了答案。它在Python TypeError消息中清楚地提到并从文档中清楚:

class io.BytesIO([initial_bytes])

BytesIO接受字节。而你传递的内容。即:response.body是一个字符串。