Найти и заменить текстовый файл в Python - PullRequest
1 голос
/ 08 марта 2019

Ниже приведен код, но вывод неправильный, когда он выводит только первые значения индекса при циклическом прохождении. Это работает, когда я напечатал значения col, rac и mon. Я также проверил значения i, чтобы убедиться, что они правильно увеличиваются.

TEXTFILE:

Fav Color   -- *color* 
Fav Car     -- *car*
Number      -- *Money*

КОД:

with open('carstest.txt', 'r') as file :
    testdata = file.read()

colors = ["RED","GREEN","BLUE"]
car =['Ferrari', 'Mustang','Camero']
Money = ['one','two','three']
i =0
while i <len(colors):
    col = colors[i]
    rac = car[i]
    mon = Money[i]
    testdata = testdata.replace('*color*',  col)
    testdata = testdata.replace('*car*', rac)
    testdata = testdata.replace('*Money*', mon)
    print(testdata)
    i+=1

else:
    print ("DONE")

OUTPPUT:

Fav Color   -- RED 
Fav Car     -- Ferrari
Number  -- one

Fav Color   -- RED 
Fav Car     -- Ferrari
Number  -- one

Fav Color   -- RED 
Fav Car     -- Ferrari
Number  -- one

DONE

Желаемый выход:

Fav Color   -- RED 
Fav Car     -- Ferrari
Number  -- one

Fav Color   -- GREEN
Fav Car     -- Mustang
Number  -- two

Fav Color   -- BLUE
Fav Car     -- Camero
Number  -- three

DONE

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Проблема в алгоритме while.Для каждого дополнительного цикла необходимо перезагрузить исходное содержимое переменной (содержимое файла).Проще говоря, вы ищете строку *color*, которая, к сожалению, больше не существует, поскольку использовалась str.replace(). Таким образом, testdata изменилось, и повторение следующего цикла больше не актуально. В противном случае вам придется разрешить алгоритм.Например, в начале цикла while создайте временную переменную:

with open('carstest.txt', 'r') as file :
    testdata = file.read()

colors = ['RED','GREEN','BLUE']
car =['Ferrari', 'Mustang','Camero']
Money = ['one','two','three']

i = 0
while i < len(colors):
    s = testdata
    s = s.replace('*color*' , colors[i])
    s = s.replace('*car*'   , car[i])
    s = s.replace('*Money*' , Money[i])
    print(s)
    i += 1
else:
    print ("DONE")
0 голосов
/ 08 марта 2019

После первого раунда замен заполнители больше не подлежат замене.Если вы начнете с первоначального значения testdata на каждой итерации, все будет в порядке.

...