2016-09-30 2 views
0

슬레이트 (https://pypi.python.org/pypi/slate)를 사용하여 디렉토리에서 여러 PDF 파일의 텍스트를 추출하려고하는 스커피 거미 작업을하고 있습니다. 실제 PDF를 디스크에 저장하는 것에 관심이 없으므로 io.bytesIO 하위 클래스 https://docs.python.org/2/library/io.html#buffered-streams을 살펴 보도록 권유 받았습니다. Creating bytesIO object을 기반으로, 나는 bytesbody 클래스를 pdf 본문으로 초기화했지만 이제는 슬레이트 모듈에 데이터를 전달해야합니다. 지금까지 나는이 : 내가 갖는작성 후 bytesIO 객체에 액세스

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

'in_memory_pdf = BytesIO (bytes (response.body))'를 시도해보십시오. – martineau

+1

감사합니다. 이로 인해 초기 문제가 해결되었습니다. – user61629

+0

BytesIO 대신 [StringIO'] (https://docs.python.org/2/library/stringio.html#module-StringIO)를 사용해보십시오. 또한,'with open (...) as f'가 필요없고, 생성 후 in_memory_pdf.seek (0)으로 시작으로 되감기 한 다음, in_memory_pdf'를 사용하십시오. _instead_ of' f'. – martineau

답변

1

이미 답을 알고있다. 그것은 명확하게 문서에서 파이썬 형식 오류 메시지에 언급 분명하다

class io.BytesIO([initial_bytes]) 

BytesIO 바이트를 사용할 수 있습니다. 그리고 그 내용을 전달하고 있습니다. 즉 : response.body는 문자열입니다.

+0

감사합니다. 매우 유용한 정보입니다! 위에서 in_memory_pdf = BytesIO (bytes (response.body))를 사용했습니다. 이제 문제는 위에서 추가 한 오류가 발생했습니다. – user61629

+0

당신의 솔루션은 오류 자체에 의해 거의 제공됩니다. 당신은 바이트의 문자열을 전달하고 있습니다. 오류 메시지와 같이 int에 콘서트하십시오. 바이트가 작동하면 작동해야합니다. –