Это мой первый вопрос, и я довольно плохо знаком с 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» в моем примере ниже), мне удалось удалить первую часть name = и заменить конечную строку запятой, но среднюю часть (содержащую несогласованное количество пробелов и табуляции + NewName =), Я не могу справиться с этим.
Мой код до сих пор:
d = {
"name=": "",
"
": ","}
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=": "",
"
": ",",
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 ответ
Используя 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)