Как переместить строку текстового файла на одну строку вверх в Python? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть текстовый файл, содержащий некоторые параметры и их значения.После анализа в Python создается словарь.Текстовый файл выглядит примерно так:

Object1
 House: Blue
 Car: Red
Green
 Garden: Big

Object2
 House: Beatiful
 Car: Nice
 Garden: Small

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

Object1
 House: Blue
 Car: Red Green
 Garden: Big

Object2
 House: Beatiful
 Car: Nice
 Garden: Small

Как я могу сделать это в Python?Я думал об использовании функций регулярных выражений, чтобы найти грин, но все же я не знаю, как поставить его на одну строку.

Код:

to_json = {}
answer = {}
block_cnt = 1
header = re.compile('[a-zA-Z0-9]')
inner = re.compile("[\t]")
empty = re.compile("[\n]",)
with open(output, 'r') as document:
    for line in document:
        #print line

        if empty.match(line[0]):
            continue

        elif header.match(line[0]):
            if answer:
                to_json[block_cnt] = answer
                #print answer
                block_cnt += 1
                answer = {}
        elif inner.match(line[0]):
            _key, value = line.split(":  ")
            tab, key = _key.split("\t")
            answer[key] = value.strip("\n")   

1 Ответ

0 голосов
/ 11 октября 2018

Вопрос : Я думал об использовании функций регулярных выражений для нахождения зеленого, но все же я не знаю, как поставить его на одну строку.

Один из вашихошибки .match(line[0]).
Вы соответствуете против первого символа в line.Это не то, что вы хотите, измените на .match(line)

Это приведет к следующему выводу:

header:Object1   
header:Green
empty:
header:Object2
{}

Ваш header = re.compile('[a-zA-Z0-9]') соответствует также Green.
Как вы можете различить 'Green' и заголовок?

Ваш inner = re.compile("[\t]") ничего не соответствует.
Я предлагаю изменить с elif inner.match(line): на else:

...