Извлечение данных из txt, имеющего некоторую структуру с Python - PullRequest
0 голосов
/ 10 февраля 2020

Я безуспешно искал решение.

Идея состоит в том, чтобы извлечь текстовый файл и преобразовать данные в фрейм данных. Я сделал это так, чтобы прочитать файл в строки, и я знаю, что могу разобрать его с помощью регулярных выражений, но не могу понять это. Моим лучшим предположением было бы начать чтение со строки 17 и взять строки, ограниченные несколькими пробелами до и после строки, пока не дойдете до строки Amendments или ----.

Ссылка на образец файла приведена ниже. Все файлы одинаковы и иногда имеют два раздела (Лицензии и Поправки). В идеале я хотел бы также поместить раздел «Поправки» во второй фрейм данных, но структура отличается.

https://www.aer.ca/data/well-lic/WELLS0120.TXT

1 Ответ

0 голосов
/ 10 февраля 2020

Вы можете использовать re.split для разделения ваших данных

for line in lines:
    print(re.split('[\s]{2,}', line.strip()))

выводов

...
['HHR HZ KARR 16-13-64-3', '0497452', 'ALBERTA CROWN', '861.9M']
['100/16-13-064-03W6/00', 'S', '481.4M', 'W', '421.6M', 'GRANDE PRAIRIE', '5967.0M']
['DEV (C)', 'KARR', 'MONTNEY FM']
['HORIZONTAL', 'NEW', 'PRODUCTION', 'CRUDE OIL']
['HAMMERHEAD RESOURCES INC.', '10-15-064-03W6']
...

В зависимости от того, какие данные вы хотите извлечь, вы можете захотеть отфильтровать некоторые строки с некоторыми операторами if и такими.

объяснение регулярного выражения

[\ s] {2,}

{2,} Квантор - Соответствует от 2 до неограниченного количества раз, столько раз, сколько возможно, возвращая при необходимости (жадный)

\s соответствует любому символу пробела (равному [\r\n\t\f\v ])



Редактировать на основе вашего комментария. Если вы знаете позиции своего текста, вы можете сделать что-то похожее на это. Однако вам потребуется внести некоторые изменения / применить некоторые логи c, чтобы правильно захватить ваши данные

for line in lines:
    positions = [4, 41, 51, 72]
    for pos in positions:
        print(re.split('[\s]{2,}', line[pos:].strip())[0])
...