Как заменить значение строки в файле ключом-значением словаря, используя скрипт python - PullRequest
0 голосов
/ 17 марта 2020

Как заменить строку в файле значением словаря, используя python:

У меня есть файл с содержимым, как показано ниже:

No.of documents inserted in collection{col_id="feed-496"} 580
No.of documents inserted in collection{col_id="feed-497"} 620
No.of documents inserted in collection{col_id="feed-498"} 630

Теперь у меня есть словарь, как показано ниже :

dict1={'feed-496':'high','feed-497':'low','feed-498':'medium'}

Как заменить 'feed-496' в файле на значение ключа из словаря выше, используя скрипт python.

Ответы [ 3 ]

1 голос
/ 17 марта 2020

Подход со встроенными модулями:

# file_contents = file.read() or similar, as long as it's a string.

for find, replacement in dict1.items():
    file_contents.replace(find, replacement)

Обратите внимание, что замены в этом случае никогда не должны появляться и в ключах словаря, иначе они будут заменены более поздними итерациями l oop.

В качестве альтернативы с регулярным выражением:

import re

# ...

# Make a function that picks what to replace with.
def feed_level(match_obj):
    # Use the capture group (see regex below) as key for the dictionary.
    return dict1[match_obj.group(0)]

re.sub(r'col_id="(.*?)"', feed_level, file_contents)

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

1 голос
/ 17 марта 2020

Чтобы заменить определенные строки в текстовом файле, используйте .replace (wrongelement, righttelement)

in.txt:

Здравствуйте и добро пожаловать в pyton.

Код:

fin = open("in.txt", "rt")
fout = open("out.txt", "wt")

for line in fin:
    fout.write(line.replace('pyton', 'python'))

fin.close()
fout.close()

out.txt:

Здравствуйте и добро пожаловать на python.

Ваш код будет выглядеть как-то как это:

dict1={'feed-496':'high','feed-497':'low','feed-498':'medium'}
fin = open("in.txt", "rt")
fout = open("out.txt", "wt")

for line in fin:
    for key in dict1:
        fout.write(line.replace(key, dict1[key]))

fin.close()
fout.close()
0 голосов
/ 17 марта 2020

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

Пример:

import re

dict1={'feed-496':'high','feed-497':'low','feed-498':'medium'}

with open(filename) as infile:
    for line in infile:                         #Iterate Each Line
        key = re.search(r'\"(.*?)\"', line)     #Search for key between Quotes
        if key:
            print(line.replace(key.group(1), dict1.get(key.group(1), key.group(1))))    #Replace Value
...