Замена строк и RegEx в файле - PullRequest
       5

Замена строк и RegEx в файле

1 голос
/ 16 января 2020

Это мой первый вопрос, и я довольно новичок в Python.

Хотя я действительно пробовал несколько разных вещей, прежде чем спросить :-D

У меня есть файл (test.txt), содержащий некоторый текст, организованный следующим образом:

name="NAME-ABC"                                                         NewName="GOOD MORNING"
name="NAME-123456"                                                      NewName="HELLO"
name="NAME-3"                                                           NewName="ALLO"

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

{"NAME-ABC":"GOOD MORNING","NAME-123456":"HELLO","NAME-3":"ALLO"}

Используя небольшой словарь («d» в моем примере ниже), мне удалось удалить имя = разделить и заменить конечную строку запятой, но в средней части (содержащей непоследовательное количество пробелов и табуляций + NewName =) я не могу с этим справиться.

Пока мой код:

d =    {
  "name=": "",
  "\n": ","}


for x in range(len(d)):

    with open("test.txt") as f:
        newText=f.read().replace(list(d.items())[x][0], list(d.items())[x][1])

    with open("test.txt", "w") as f:
        f.write(newText)

, который дает мне файл text.txt следующим образом:

"NAME-ABC"                                                      NewName="GOOD MORNING",
"NAME-123456"                                               NewName="HELLO",
"NAME-3"                                                        NewName="ALLO"

, но если я добавлю что-то вроде

d =    {
      "name=": "",
      "\n": ",",
       re.compile(r'\s*NewName='): ":"}

, я получу следующую ошибку

TypeError: аргумент replace () 1 должен быть str, а не re.Pattern

Затем я попытался использовать re.sub для обработки регулярных выражений, но теперь это просто не помогает вообще ничего (программа запускается, но в файле нет изменений):

for line in "test.txt":
    line = re.sub(r'\s*NewName=',":","test.txt")

Заранее спасибо за помощь, ребята

1 Ответ

1 голос
/ 16 января 2020

Использование Regex.

Пример:

import re

res = {}
with open(filename) as infile:
    for line in infile:                                   #Iterate Each line
        k, v = re.findall(r'=\"(.*?)\"', line.strip())    #Get Key-Value --> Get string in Quotes
        res[k] = v                                        #Form output
print(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...