1

このpythonコマンドラインユーティリティを変換して、既存のプログラムでコードをモジュールとして使用できるようにし、MongoEngineを使用してMongoDBに保存されているpdfをフィードできるようにしています。

現在、ファイル名を文字列として受け取り、次のコードを使用してファイルを取得します。

fp = file(fname, 'rb')

mongoDB からドキュメントを挿入したいので、関数の引数を に変更しmain(fp)、インタラクティブな Python インタープリターから次のことを行いました。

>>> from app.documents import UserDocument
>>> from app.pdfutils2 import main
>>> doc = UserDocument.objects.first()
>>> main(doc._file.read())
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "app/pdfutils2.py", line 107, in main
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching, check_extractable=True):
  File "/Library/Python/2.7/site-packages/pdfminer/pdfpage.py", line 118, in get_pages
    parser = PDFParser(fp)
  File "/Library/Python/2.7/site-packages/pdfminer/pdfparser.py", line 43, in __init__
    PSStackParser.__init__(self, fp)
  File "/Library/Python/2.7/site-packages/pdfminer/psparser.py", line 495, in __init__
    PSBaseParser.__init__(self, fp)
  File "/Library/Python/2.7/site-packages/pdfminer/psparser.py", line 166, in __init__
    self.seek(0)
  File "/Library/Python/2.7/site-packages/pdfminer/psparser.py", line 507, in seek
    PSBaseParser.seek(self, pos)
  File "/Library/Python/2.7/site-packages/pdfminer/psparser.py", line 196, in seek
    self.fp.seek(pos)
AttributeError: 'str' object has no attribute 'seek'

fpは最初に'rb'フラグを使用して作成されるため、mongoengine からバイナリ モードで作成する必要があると思いますが、 FileFieldfpの GridFS 結果をバイナリ モードに変換する方法がわかりません。

GridFS の結果をバイナリに変換して、 を使用して取得したときと同じにする方法についてのヒントはありfile(fname, 'rb')ますか? すべてのヒントは大歓迎です!

4

1 に答える 1

0

私は答えを見つけたので、将来の読者のために; やるべきだった

main(doc._file)

それ以外の

main(doc._file.read())

ごきげんよう!

于 2014-10-22T11:36:09.763 に答える