извлечь данные из некоторого формата строки - PullRequest
0 голосов
/ 07 мая 2018

у меня есть несколько строк в этом формате:

GETMOVIE#genre:Action&year:1990-2007&country:USA
GETMOVIE#genre:Animation&year:2000-2010&country:Russia
GETMOVIE#genre:X&year:Y&country:Z

Я хочу знать, как я могу извлечь XYZ из этих строк в строки \ список, который я пробовал с нарезкой, но это имппосиболе.Несколько советов?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Вы можете использовать str.split() для этого типа:

Код:

def process_data(some_data):
    return_data = {}
    for datum in some_data:
        main_key, values = datum.split('#')
        return_data.setdefault(main_key, []).append(dict(
            tuple(v.split(':')) for v in values.split('&')
        ))
    return return_data

Тестовый код:

data = [x.strip() for x in """
    GETMOVIE#genre:Action&year:1990-2007&country:USA
    GETMOVIE#genre:Animation&year:2000-2010&country:Russia
    GETMOVIE#genre:X&year:Y&country:Z
""".split('\n')[1:-1]]

print(data)
print(process_data(data))

Результаты:

['GETMOVIE#genre:Action&year:1990-2007&country:USA', 
 'GETMOVIE#genre:Animation&year:2000-2010&country:Russia', 
 'GETMOVIE#genre:X&year:Y&country:Z']

{'GETMOVIE': [
    {'genre': 'Action', 'year': '1990-2007', 'country': 'USA'}, 
    {'genre': 'Animation', 'year': '2000-2010', 'country': 'Russia'}, 
    {'genre': 'X', 'year': 'Y', 'country': 'Z'}
]}
0 голосов
/ 07 мая 2018

Почему это невозможно с разделением?

Вот хороший однострочник:

s = "GETMOVIE#genre:Animation&year:2000-2010&country:Russia"
d = dict(p.split(':', 1) for p in s.partition("#")[2].split("&"))
print(d)
0 голосов
/ 07 мая 2018
import re

line = 'GETMOVIE#genre:Action&year:1990-2007&country:USA'
pattern = r'^GETMOVIE#genre:(.+)&year:(.+)&country:(.+)$'
genre, year, country = re.match(pattern, line).groups()
print(genre, year, country)  # Action 1990-2007 USA
...