0

pdfminerPython のモジュールを使用して、複数の pdf ファイルをテキスト ファイルに変換できるコードをオンラインで見つけました。ディレクトリに保存したいくつかの pdf ファイルのコードを展開しようとしましたが、コードはエラーになります。

これまでの私のコード:

import nltk
import re
import glob

from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage

def convert(fname, pages=None):
   if not pages:
       pagenums = set()
    else:
       pagenums = set(pages)

   output = StringIO()
   manager = PDFResourceManager()
   converter = TextConverter(manager, output, laparams=LAParams())
   interpreter = PDFPageInterpreter(manager, converter)

   infile = file(fname, 'rb')
   for page in PDFPage.get_pages(infile, pagenums):
       interpreter.process_page(page)
   infile.close()
   converter.close()
   text = output.getvalue()
   output.close

   with open('D:\Reports\*.txt', 'w') as pdf_file:
       pdf_file.write(text)

   return text

directory = glob.glob('D:\Reports\*.pdf')  

for myfiles in directory:  
     convert(myfiles)

エラーメッセージ:

Traceback (most recent call last):
  File "F:/Text mining/pdfminer for several files", line 40, in <module>
    convert(myfiles)
  File "F:/Text mining/pdfminer for several files", line 32, in convert
    with open('D:\Reports\*.txt', 'w') as pdf_file:
IOError: [Errno 22] invalid mode ('w') or filename: 'D:\\Reports\\*.txt'
4

2 に答える 2

1

textこのエラーは、変数の内容を という名前のファイルに書き込もうとしたことが原因で発生します'D:\Reports\*.txt'*ファイル名にワイルドカードを使用することはできません ( ref )。

ファイルを同じ名前のテキスト ファイルに保存する場合は、書き込み機能を次のように置き換えることができます。

   outfile = os.path.splitext(os.path.abspath(fname))[0] + '.txt'
   with open(outfile, 'wb') as pdf_file:
       pdf_file.write(text)

import osOS に依存しない方法でパスを処理する場合は、忘れないでください。

于 2016-11-28T17:47:59.440 に答える
0

おそらく変更する必要があります:

with open('D:\Reports\*.txt', 'w') as pdf_file:
    pdf_file.write(text)

with open(fname, 'w') as pdf_file:
    pdf_file.write(text)

しかし、マシンに確認できるpython2.7-3.4がありません

于 2016-11-28T17:40:55.620 に答える