#python #list #indexing #text #iteration
#python #Список #индексирование #текст #итерация
Вопрос:
Python 3.8 — У меня есть PDF-документ, состоящий из нескольких 3-5-страничных документов, объединенных в один PDF. Я просто отлично конвертирую его в текстовый документ.
Мне нужно извлечь некоторую информацию из каждого документа, поэтому я разделил текстовый документ на строки и попытался просто отсканировать строки, и если в строке указано «Страница 1», затем сохраните этот индекс в списке. Тогда я буду знать, как искать информацию о моем первом документе между первыми двумя индексами, где была найдена страница 1.
Результат этого списка значений индекса меня сильно смущает. Пожалуйста, смотрите ниже.
pdf_list = next(os.walk(pdf_directory))[2]
for each_pdf in pdf_list:
extension = str(each_pdf[-4:])
if extension == '.pdf':
with open(each_pdf, "rb") as f:
pdf = pdftotext.PDF(f)
with open(str(each_pdf[:-4] '.txt'), "w") as f:
f.write("nn".join(pdf))
#All groovy so far.. turned it into a .txt file. Looks correct.
for each_txt in pdf_list:
extension = str(each_txt[-4:])
if extension == '.txt':
with open(each_txt, "r") as f:
text = f.read()
lines = text.splitlines()
page_1_indices = []
for each in lines:
if "Page 1" in each:
new_index = lines.index(each)
page_1_indices.append(new_index)
print(page_1_indices)
Вот результат… Он возвращается к предыдущим местам так беспорядочно, что я не вижу шаблона. Я имею в виду … прямо из ворот он снова попадает в 221 по индексу 4 ?!
[0, 88, 221, 310, 221, 874, 986, 221, 1303, 0, 221, 986, 1915, 874, 2155, 986, 2512, 2155, 986, 3079, 310, 3336, 2155, 3674, 1915, 2155, 4181, 4434, 2155, 4743, 4743, 986, 5235, 2155, 2155, 1915, 2155, 0, 2155, 0, 2155, 221, 5235, 4743, 2155, 2155, 221, 986, 2155, 2155, 8259, 4743, 0, 0, 8728, 4181, 221, 8259, 2155, 221, 2155, 5235, 0, 986, 10691, 1915, 2155, 3674, 0, 8259, 986, 986, 221, 12362, 0, 986, 0, 5235, 5235, 13232, 5235, 0, 5235, 986, 2155, 1915, 1915, 1915, 2155, 14646, 221, 221, 221, 2155, 1915, 3079, 221, 0, 221, 2155, 2155, 5235, 0, 1915, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 874, 874, 2155, 2155, 2155, 20468, 20468, 20468, 20468, 20468, 20468, 20468, 20468, 20468, 20468, 20468, 22193, 20468, 20468, 20468, 22193, 20468, 20468, 22193, 20468, 20468, 20468, 22193]
Комментарии:
1. Не могли бы вы поделиться какой-то частью входных данных?
2. К сожалению, я не могу из-за личной информации в документах. Я буду работать над созданием тестового примера и его проверкой.
Ответ №1:
Я думаю, что у меня это работает. Я просто напрямую ссылался на текстовый файл и прекратил попытки извлечь индексы другим способом и использовал перечисление.
with open(txt_file, "r") as f:
text = f.read()
lines = text.splitlines()
page_1_indices = []
for (i, j) in enumerate(lines):
if "Page 1" in j:
page_1_indices.append(i)
print(page_1_indices)
вывод:
[0, 88, 221, 310, 523, 874, 986, 1167, 1303, 1392, 1476, 1691, 1915, 2062, 2155, 2295, 2512, 2719, 2868, 3079, 3214, 3336, 3517, 3674, 3838, 3985, 4181, 4434, 4612, 4743, 4886, 5044, 5235, 5385, 5584, 5759, 5887, 6034, 6121, 6249, 6327, 6470, 6562, 6833, 7016, 7164, 7364, 7696, 7917, 8110, 8259, 8399, 8526, 8639, 8728, 8862, 9088, 9346, 9504, 9638, 9871, 10049, 10385, 10473, 10691, 10891, 11028, 11209, 11408, 11488, 11647, 11934, 12179, 12362, 12541, 12627, 12830, 12918, 13075, 13232, 13304, 13489, 13578, 13749, 13968, 14104, 14226, 14385, 14507, 14646, 14867, 15159, 15295, 15386, 15543, 15671, 15851, 16063, 16148, 16348, 16472, 16635, 16718, 16806, 16965, 17068, 17255, 17376, 17509, 17672, 17816, 18009, 18178, 18317, 18445, 18626, 18784, 18947, 19069, 19256, 19437, 19571, 19700, 19824, 19934, 20096, 20295, 20468, 20602, 20818, 21017, 21216, 21337, 21458, 21579, 21713, 21912, 22039, 22193, 22333, 22507, 22694, 22828, 22985, 23166, 23353, 23481, 23609, 23731, 23883]