Цикл по словарю для замены нескольких значений в текстовом файле - PullRequest
0 голосов
/ 02 августа 2020

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

Моя цель - написать простой Python скрипт для поиска старых значений в текстовом файле на основе первого столбца и замените их новыми значениями во втором.

Я пытаюсь использовать словарь для облегчения этого replace(), который я создал, просматривая CSV в цикле. Создать его было довольно просто, но использовать его для выполнения replace() не получилось. Когда я распечатываю значения после запуска сценария, я все еще вижу исходные.

Я пробовал читать текстовый файл, используя read(), и выполнять изменения для всего файла, как указано выше.

import csv

filename = "origin.txt"
csv_file = 'replacements.csv'
conversion_dict = {}

# Create conversion dictionary
with open(csv_file, "r") as replace:
    reader = csv.reader(replace, delimiter=',')
    for rows in reader:
        conversion_dict.update({rows[0]:rows[1]})

#Replace values on text files based on conversion dict
with open(filename, "r") as fileobject:
    txt = str(fileobject.read())
    for keys, values, in conversion_dict.items():
        new_text = txt.replace(keys, values)

Я также попытался добавить обновленный текст в список:

#Replace values on text files based on conversion dict
with open(filename, "r") as fileobject:
    txt = str(fileobject.read())
    for keys, values, in conversion_dict.items():
        new_text.append(txt.replace(keys, values))

Затем я попытался использовать readlines(), чтобы заменить старые значения на новые по одной строке time:

# Replace values on text files based on conversion dict
with open(filename, "r") as reader:
    reader.readlines()
    type(reader)
    for line in reader:
        print(line)
        for keys, values, in conversion_dict.items():
            new_text.append(txt.replace(keys, values))

Во время устранения неполадок я провел тест, чтобы проверить, есть ли совпадения между ключами в моем dict и текстом в файле:

for keys, values, in conversion_dict.items():
    if keys in txt:
        print("match")
    else:
        print("no match")

Мой вывод вернул match в каждой строке, кроме первой. Думаю, с помощью некоторой обрезки или чего-то еще я мог бы это исправить. Однако это доказывает, что есть совпадения, поэтому с моим кодом должна быть какая-то другая проблема.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 августа 2020

origin.txt:

oldVal9000,oldVal1,oldVal2,oldVal3,oldVal69

test.csv:

oldVal1,newVal1
oldVal2,newVal2
oldVal3,newVal3
oldVal4,newVal4
import csv

filename = "origin.txt"
csv_file = 'test.csv'
conversion_dict = {}

with open(csv_file, "r") as replace:
    reader = csv.reader(replace, delimiter=',')
    for rows in reader:
        conversion_dict.update({rows[0]:rows[1]})

f = open(filename,'r')
txt = str(f.read())
f.close()

txt= txt.split(',')         #not sure what your origin.txt actually looks like, assuming comma seperated values
for i in range(len(txt)):
    if txt[i] in conversion_dict:
        txt[i] = conversion_dict[txt[i]]
        
with open(filename, "w") as outfile:
    outfile.write(",".join(txt))

измененный origin.txt:

oldVal9000,newVal4,newVal1,newVal3,oldVal69

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...