2015-07-22 5 views
1

Я пытаюсь удалить некоторые скрытые записи, используя мой скрипт pdfform-scraper, прежде чем записывать его в файл csv. Но я продолжаю получать ошибку, упомянутую в названии. Соответствующий фрагмент кода:TypeError: аргумент типа «PSLiteral» не итерируется

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))) 

полная ошибка (+ выход) является:
нормально
нормально

Traceback (most recent call last): File "C:\Python27\Scripts\test3.py", line 37, in elif '\n' in value: TypeError: argument of type 'PSLiteral' is not iterable

Кто-нибудь знает, как решить эту проблему?

+0

Можете ли вы проверить тип 'значение' и можете ли вы распечатать его содержимое? –

+0

@alec_djinn Посмотрите http://stackoverflow.com/questions/31521403/convert-data-from-pdfform-to-csv – Readazoid

+0

Попробуйте 'elif '\ n' в str (значение):' ... делает это решать? –

ответ

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',' ') 
+0

Как изменить 'значение' на строку? Могу ли я сделать это после запуска 'field.get ('V')'? – Readazoid

+0

Нормальный выход печати чист. Вот почему я смущен: -s. – Readazoid

+0

Странно, я согласен. –

Смежные вопросы