Форум сайта python.su
Здравствуйте!
Как можно написать цикл для выгрузки данных по Адресу юридического лица, например.
Начинается с Адреса юридического лица, а заканчивается поиск двумя цифрами, в данном случае 11.
Предположительно нужно посчитать всего строк в файле, найти которые начинаются с Адрес юридического лица и заканчиваются до двухзначной цифры, в данном случае 11.
import fitz # pip install PyMuPDF import re doc = fitz.open('ul-1135007001029-20211205201715.pdf') text = '' for page in doc: text += page.get_text() name = re.search('Полное наименование на русском языке\n+(.+)\n+(.+)', text)[0] edit_name = lambda s: s.replace('','') name=edit_name(name.replace('Полное наименование на русском языке','')) name=edit_name(name.replace('\n',' ')) name=edit_name(name.replace(' ОБЩЕСТВО','ОБЩЕСТВО')) name1=edit_name(name.replace('ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ','ООО')) name2=edit_name(name.replace('ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ','')) date=re.findall('Дата регистрации\n+(.+)', text)[0] capital=re.findall('Размер \(в рублях\)\n+(.+)', text)[0] dolzhnost=re.findall('Должность\n+(.+)', text)[0] director=re.findall('Отчество\n+(.+)+\n+(.+)+\n+(.+)', text)[0] director=' '.join(director) inn = re.findall('ИНН юридического лица\n+(.+)', text)[0] ogrn = re.findall('ОГРН\n+(.+)', text)[0] kpp = re.findall('КПП юридического лица\n+(.+)', text)[0] okved = re.search('Код и наименование вида деятельности\n+(.+)', text)[0] edit_okved = lambda s: s.replace('','') okved=edit_okved(okved.replace('Код и наименование вида деятельности\n','')) index = re.findall('Адрес юридического лица\n+(\d{6})', text)[0] ##y='Адрес юридического лица' ## ##for i in text: ## count=0 ## if r in y: ## if i==r: ## count += 1 address = re.findall('Адрес юридического лица\n+(.+)\n+(.+)\n+(.+)\n+(.+)\n+(.+)\n+(.+)\n+(.+)', text)[0] address=' '.join(address) count = sum(1 for line in text if line.rstrip('\n'))
Прикреплённый файлы:
ul-1162375035470-20211205105157.pdf (169,2 KБ)
Офлайн
Сперва сделай из pdf-файла текстовый txt-файл. Дальше с этим текстовым txt-файлом работай. Не надо работать с pdf-файлами. Если нужен будет pdf-файл в конечном итоге, то его ты сделаешь из txt-файла, который у тебя будет к тому времени.
Это тебе первое задание. Напиши один отдельный скрипт конвертер из pdf в txt, который больше ничего не делает. И пусть он отдельно лежит. Им ты будешь только переводить файл из pdf в txt. Вот напиши и покажи, что ты в состоянии хоть что-то делать.
Отредактировано py.user.next (Дек. 8, 2021 22:36:12)
Офлайн
Здравствуйте!
Этот код работает.
import fitz def extract_text(): file=fitz.open('ul-1162375035470-20211205105157.pdf') for pageNumber, page in enumerate(file.pages(),start=1): text=page.get_text() #txt=open(f'report_Page_{pageNumber}.txt','a') txt=open('C:\\Python38\\Тест\\1.txt','a') txt.writelines(text) txt.close() if(__name__ == "__main__"): extract_text()
import PyPDF2 import sys # Открытие файла в бинарном режиме только для чтения, указатель файла в начале read_pdf=open('ul-1162375035470-20211205105157.pdf','rb') # Создание переменной чтения, которая будет считывать объект pdf-файла reader_pdf=PyPDF2.PdfFileReader(read_pdf) # Количество страниц pdf файла num_pages=reader_pdf.numPages # Cоздание переменной, которая будет выбирать выбранное количество страниц convert_pages=reader_pdf.getPage(num_pages-1) # Cоздание текстовой переменной, в которой будут храниться все текстовые данные из PDF-файла extract_text=convert_pages.extractText() # Сохранение данных в текстовый файл location=open(r"C:\\Python38\\Тест\\1.txt","a") location.writelines(extract_text) location.close()
Офлайн
PSASЭто проблемы PyPDF2. Он требует какие-то особенные pdf-файлы. Типа самые самые правильные.
Это код почему-то не работает
Отредактировано py.user.next (Дек. 11, 2021 05:14:50)
Офлайн
Добрый день, спасибо.
Следующий шаг - парсинг текстового файла для извлечения необходимых данных (наименование, адреса и т.д.) для сохранения в базу эксель и использования в шаблонах (например, word либо pdf)?
Можно использовать для этих целей модуль re или лучше pyparsing?
Офлайн
import fitz import re def get_text(pdf_file):# получает текст из pdf print(pdf_file) doc = fitz.open(pdf_file) text = '' for page in doc: text += page.get_text() doc.close() # print(text.encode('1251', 'ignore').decode('1251')) return text # возвращает str def get_data(text): address = None if match := re.search('(?<=Адрес юридического лица\n)(.|\n)+?(?=\n11\n)', text): address = match[0] return address text = get_text('egrn.pdf') print(get_data(text))
350049, Краснодарский край, Г.О. ГОРОД КРАСНОДАР, Г КРАСНОДАР, УЛ КРАСНЫХ ПАРТИЗАН, Д. 108, ПОМЕЩ. 4
Офлайн
PSASДальше ты берёшь текстовый файл, который получился, и используешь его так, будто он не из pdf-файла был получен, а как будто он и был у тебя изначально. И вот для этого txt-файла ты ставишь задачу.
Следующий шаг - парсинг текстового файла для извлечения необходимых данных (наименование, адреса и т.д.) для сохранения в базу эксель и использования в шаблонах (например, word либо pdf)?
Дано : текстовый файл input.txt с данными одной записи на разных строках
Получить: текстовый файл output.txt с адресом юридического лица
Дано : текстовый файл input.txt с данными одной записи на разных строках
Получить: текстовый файл output.txt с наименованием, адресом юридического лица и ИНН юридического лица на разных строках
Отредактировано py.user.next (Дек. 11, 2021 22:28:59)
Офлайн
Здравствуйте!
Дано : текстовый файл input.txt с данными одной записи на разных строках
Получить: данные о всех ОКВЭДах находящимися на разных строках.
op_okved = None # значение по умолчанию
dop_okved_shablon = re.compile('Код и наименование вида деятельности\n+(.+)\n+(.+)\n+(.+)')
dop_okved = (dop_okved_shablon.findall(text))
dop_okved = ‘\n’.join(' '.join(tup) for tup in dop_okved)
В выгрузке получаются лишние данные
42.91 Строительство водных сооружений 54 ГРН и дата внесения в ЕГРЮЛ записи,
41.10 Разработка строительных проектов 56 ГРН и дата внесения в ЕГРЮЛ записи,
41.20 Строительство жилых и нежилых зданий 58
42.11 Строительство автомобильных дорог и автомагистралей 60
42.12 Строительство железных дорог и метро 62
42.13 Строительство мостов и тоннелей 64 ГРН и дата внесения в ЕГРЮЛ записи,
42.21 Строительство инженерных коммуникаций для водоснабжения и водоотведения, газоснабжения
42.22 Строительство коммунальных объектов для обеспечения электроэнергией и телекоммуникациями
42.99 Строительство прочих инженерных сооружений, не включенных в другие группировки
43.11 Разборка и снос зданий 72 ГРН и дата внесения в ЕГРЮЛ записи,
43.12 Подготовка строительной площадки 74 ГРН и дата внесения в ЕГРЮЛ записи,
43.13 Разведочное бурение 76 ГРН и дата внесения в ЕГРЮЛ записи,
43.21 Производство электромонтажных работ 78
43.22 Производство санитарно-технических работ, монтаж отопительных систем и систем кондиционирования воздуха
43.29 Производство прочих строительно- монтажных работ 82
43.31 Производство штукатурных работ 84 ГРН и дата внесения в ЕГРЮЛ записи,
43.32 Работы столярные и плотничные 86 ГРН и дата внесения в ЕГРЮЛ записи,
43.33 Работы по устройству покрытий полов и облицовке стен 88
43.34 Производство малярных и стекольных работ 90
43.39 Производство прочих отделочных и завершающих работ 92
43.91 Производство кровельных работ 94 ГРН и дата внесения в ЕГРЮЛ записи,
43.99 Работы строительные специализированные прочие, не включенные в другие группировки
74.90 Деятельность профессиональная, научная и техническая прочая, не включенная в другие группировки
Прикреплённый файлы:
main.zip (362,2 KБ)
Офлайн
PSASШаблон у тебя расчитан так, чтобы брать три строки под строкой “Код и наименование вида деятельности”. Но в записях в текстовом файле там бывает три строки, а бывает две строки. Теоретически там может быть и одна строка, и десять строк, поэтому надо это всё учесть.
В выгрузке получаются лишние данные
Отредактировано py.user.next (Окт. 20, 2022 23:12:06)
Офлайн
PSAS
В выгрузке получаются лишние данные
search = re.findall(r'(?<=Код и наименование вида деятельности\n).+\n?\D+(?=\n\d+\n)', text) out = '\n'.join(i.replace('\n', '')for i in search) print(out)
42.91 Строительство водных сооружений
41.10 Разработка строительных проектов
41.20 Строительство жилых и нежилыхзданий
42.11 Строительство автомобильных дороги автомагистралей
42.12 Строительство железных дорог иметро
42.13 Строительство мостов и тоннелей
42.21 Строительство инженерныхкоммуникаций для водоснабжения иводоотведения, газоснабжения
42.22 Строительство коммунальныхобъектов для обеспечения электроэнергиейи телекоммуникациями
42.99 Строительство прочих инженерныхсооружений, не включенных в другиегруппировки
43.11 Разборка и снос зданий
43.12 Подготовка строительной площадки
43.13 Разведочное бурение
43.21 Производство электромонтажныхработ
43.22 Производство санитарно-техническихработ, монтаж отопительных систем исистем кондиционирования воздуха
43.29 Производство прочих строительно-монтажных работ
43.31 Производство штукатурных работ
43.32 Работы столярные и плотничные
43.33 Работы по устройству покрытийполов и облицовке стен
43.34 Производство малярных истекольных работ
43.39 Производство прочих отделочных изавершающих работ
43.91 Производство кровельных работ
43.99 Работы строительныеспециализированные прочие, невключенные в другие группировки
74.90 Деятельность профессиональная,научная и техническая прочая, невключенная в другие группировки
Офлайн