#python #pdfplumber
Вопрос:
Как я могу распечатать следующую строку из текста, извлеченного из PDF-файла, с помощью функции pdfPlumber extract.text?
Я попробовал line.next (), но это не работает.
Фактическое название работы находится в строке после «Название работы». Как показано в примере ниже.
Название должности
Развитие торгового центра Олбани
Мой код, как показано ниже.
jobName_re = re.compile(r'(Job Name)')
siteAddress_re = re.compile(r'(Wellingtons)(. )')
file = 'invoices.pdf'
lines = []
with pdfplumber.open(file) as myPdf:
for page in myPdf.pages:
text = page.extract_text()
for line in text.split('n'):
jobName = jobName_re.search(line)
siteAddress = siteAddress_re.search(line)
if jobName:
print('The next line that follows Job Name is', line.next())
elif siteAddress:
print(siteAddress.group(1))
Комментарии:
1. Что вы подразумеваете под «следующей строкой»? Не могли бы вы показать пример того, какой именно текст вы получаете и какие именно выходные данные вы хотите получить, и объяснить, чем это отличается от ваших существующих выходных данных?
Ответ №1:
У вас есть несколько вариантов.
Вариант 1
Вы можете переключиться на использование целочисленного индекса для циклического просмотра записей:
lines = text.split('n')
for i in range(len(lines)):
line = lines[i]
Тогда вы сможете получить доступ lines[i 1]
.
Вариант 2
Установите флажок, чтобы сказать, что вы видели заголовок для названия работы, а затем поднимите его в следующий раз в цикле. Что-то вроде этого:
last_was_job_heading = False
for line in text.split('n'):
siteAddress = siteAddress_re.search(line)
if last_was_job_heading:
print('The next line that follows Job Name is', line)
elif siteAddress:
print(siteAddress.group(1))
last_was_job_heading = jobName_re.search(line)
Вариант 3
Не разделяйте текст на строки вообще. Вместо этого используйте более разумные регулярные выражения для анализа нескольких строк одновременно.
Вариант 4
Используйте какую-нибудь библиотеку синтаксического анализа вместо регулярных выражений. Это, вероятно, излишне в этом простом случае.
Комментарии:
1. Большое тебе спасибо, Мэтью. Первый вариант меня устраивает. Я смог напечатать строку после строки названия работы.