Извлечение указанных c значений для заголовка в разных строках с помощью регулярных выражений - PullRequest
0 голосов
/ 04 мая 2020

У меня есть текстовая строка, которая состоит из нескольких строк, и каждая строка имеет сочетание символов / цифр и пробелов и т. Д. c.

Вот как выглядит пара строк:

WEIGHT                         VOLUME                    CHARGEABLE                PACKAGES\n                                                             
398.000 KG                     4.999 M3                  833.500 KG                12 PLT\n                                                                                         
MAWB                                    HAWB\n    / MH616 /                                                                                         
8947806753                             ABC20018830\n  

Вывод, который я ищу, заключается в извлечении вышеуказанных заголовков в качестве ключей и их значений в качестве значений dict.

{ 
 "WEIGHT": 398.00 KG, 
 "VOLUME" : 4.99 M3,
 "CHAREGABLE" : 833.500 KG,
 "PACKAGES": 12 PLT,
 "MAWB"  : 8947806753,
 "HAWB"  : ABC20018830
} 

Я не уверен, как извлечь значение для определенного поля из другой строки под ним. Если это в одной строке, я могу получить, используя шаблон. Но не уверен, как извлечь его из другой строки (значение поля находится прямо под ним в другой строке).

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете использовать регулярное выражение, чтобы легко разбить текст на список, содержащий все поля:

import re

a = "WEIGHT                         VOLUME                    CHARGEABLE                PACKAGES\n                                                                         398.000 KG                     4.999 M3                  833.500 KG                12 PLT\n                                                                                         MAWB                                    HAWB\n    / MH616 /                                                                                           8947806753                             ABC20018830\n"

# Split on 4 (or more) whitespace (leaves the units with the numbers)
data = re.split(r'\s{4,}', a)
print(data)

['WEIGHT', 'VOLUME', 'CHARGEABLE', 'PACKAGES', «398.000 кг», «4.999 м3», «833.500 кг», «12 PLT», «MAWB», «HAWB», «/ MH616 /», «8947806753», «ABC20018830 \ n»]

Поскольку ключи и значения смешаны, вероятно, не существует простого способа автоматически определить, что есть что. Однако, если они всегда находятся в одной и той же позиции, вы можете выбрать их вручную, например:

b = {
    # WEIGHT
    data[0]: data[4],
    # VOLUME
    data[1]: data[5]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...