opposite
@opposite
свободный художник

Как парсить большой текст на Python?

Добрый день, есть такие исходные данные:
дан текстовый файл (txt), данные в котором располагаются вот в таком виде (форматирование выполнено пробелами):

Иванов Иванов    (rus)                            ООО "Белое и пушистое"
Ivanov Ivan           (en)                             White and Fluffy LLC
                                                                 Москва, Кремль, офис №15

Таких записей огромное количество (общий вес документа около 50 мегабайт).

Задача состоит в том, чтобы утилите на вход подать "Белое и пушистое" или "White and Fluffy LLC" и "rus" или "eng", а она в ответ имя и фамилию в нужном языке.
Проблема в весе исходного текстового документа.

Что посоветуете для более-менее быстрого парсинга такого файла?

Как оказалось, важное замечание: этот файл мы не сами редактируем, его присылает другая организация (государственная) изменить его формат невозможно.
  • Вопрос задан
  • 6084 просмотра
Пригласить эксперта
Ответы на вопрос 4
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Не понятно, для чего это делать на питоне? Тестовое задание?
Соберите в словарь, чтобы ключами были "Белое и пушистое" и "White and Fluffy LLC" и внутри лежал еще один словарь с ключами "rus" и "eng", а данными соответственно были "Иванов Иванов" и "Ivanov Ivan".

Но, вообще, лучше сделать парсер, который будет одноразово складывать данные в базу, и клиента, который будет подключаться к базе и выбирать нужные данные в зависимости от запроса. Работать будет быстро и надежно.
Ответ написан
@iSergios
Python-разработчик
Однако лягушки. Однако кактус.
Решение настолько простое, что выкладывать готовый код как-то неприлично. Копайте в сторону метода .readline()
Вообще же, чтобы не колоться в будущем и облегчить жизнь людям, я бы на вашем месте прислушался к советам по поводу БД. Сложить один раз в базу (можно sqlite), написать простенькую гуевину к бд для ввода, удаления и поиска. Работы на пол дня.
Ответ написан
@Xander017
Например для того, что сейчас в вопросе:
inp = input()

f = open("yourfile", "r")

for line in f:
if inp in line:
fio = line.split(" ")
print(fio[0] + " " + fio[1])
Ответ написан
@abcd0x00
Что посоветуете для более-менее быстрого парсинга такого файла?

Ты должен перегнать это в базу данных, у которой есть средства для SQL запросов. Это сейчас тебе надо найти вот это вот по этому, а завтра понадобится найти совсем другое по совсем другому. И для всего этого (всех возможных вариантов) подходит именно гибкий язык запросов. Поэтому тебе нужно написать перегонщик исходных данных в хорошую базу данных, который ты потом привяжешь к скрипту, который проверяет, изменился ли этот файл с исходными данными, чтобы автоматически составить новую базу. И для того, чтобы его написать, нужно сначала подготовить исходный файл (удалить лишние пробелы), потом проанализировать его на отдельные записи (это лексический анализатор нужно сделать), а потом этот поток лексем сохранить уже в виде записей в таблице базы данных. Но в базе данных у тебя уже должно быть всё по уму сделано, чтобы любые поиски выполнять можно было и ничего не путалось. Возможно даже, что тебе нужно будет сделать разные таблицы (для русского и для английского и связать их). Работы немало.

Как оказалось, важное замечание: этот файл мы не сами редактируем, его присылает другая организация (государственная) изменить его формат невозможно.

А ты вызвался упростить работу? Зря, всё равно не оценят. Будешь бесплатно работать за грамоту и похлопывание по плечу.
Если есть возможность, вообще в такие вещи не лезь, пусть ищут хоть руками, хоть ногами. Говори, что так и должно быть, а сам занимайся полезными вещами, чтобы не деградировать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы