Извлечение данных из TXT, который имеет некоторую структуру с Python

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

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

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

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

Всего 1 ответ


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

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

выходы

...
['HHR HZ KARR 16-13-64-3', �', 'ALBERTA CROWN', 鮵.9M']
[颼/16-13-064-03W6/00', 'S', 騹.4M', 'W', 駽.6M', 'GRANDE PRAIRIE', 񠪿.0M']
['DEV (C)', 'KARR', 'MONTNEY FM']
['HORIZONTAL', 'NEW', 'PRODUCTION', 'CRUDE OIL']
['HAMMERHEAD RESOURCES INC.', ཆ-15-064-03W6']
...

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

Объяснение регулярных выражений

[ s] {2,}

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

s соответствует любому символу пробела (равен [ fv ] )



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

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

Есть идеи?

10000