1

csv ファイルに書き込む前に、pdfform-scraper-script を使用して隠しエントリを削除しようとしています。しかし、タイトルに記載されているエラーが引き続き発生します。関連するコードは次のとおりです。

import glob
import os
import sys
import csv
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1

path = 'C:\Users\Wonen\Downloads\Test'
for filename in glob.glob(os.path.join(path, '*.pdf')):
    fp = open(filename, 'rb')
    #read pdf's
    parser = PDFParser(fp)
    doc = PDFDocument(parser)
    #doc.initialize()    # <<if password is required
    fields = resolve1(doc.catalog['AcroForm'])['Fields']
    row = []
    for i in fields:
        field = resolve1(i)
        name, value = field.get('T'), field.get('V')
        #removing 'hidden enter'
        if value == None:
           print 'ok'
        elif value == NotImplementedError:
            print 'ok'
        elif '\n' in value:    
           value.replace('\n',' ')
        elif '\r' in value:    
           value.replace('\r',' ')
        row.append(value)
    writer.writerow(list(reversed(row)))

完全なエラー (+出力) は次のとおりです:
ok
ok

トレースバック (最新の最後の呼び出し): ファイル "C:\Python27\Scripts\test3.py"、37 行目、elif '\n' の値: TypeError: 型 'PSLiteral' の引数は反復可能ではありません

これを解決する方法を知っている人はいますか?

4

1 に答える 1

0

入力ファイルの内容がわからないため、推測するのは困難です。問題は、これを解決するために呼び出すときに文字列以外の値を取得することだと思います。文字列field.get('V')に変更valueすることをお勧めします。このようにしてみてください:

if value == None:
   print 'ok'
elif value == NotImplementedError:
    print 'ok'
elif '\n' in str(value):
   value = str(value)    
   value.replace('\n',' ')
elif '\r' in str(value):
   value = str(value)    
   value.replace('\r',' ')
于 2015-07-22T15:16:40.227 に答える