Как заменить часть текста в строке?

Есть файл со строками.
Необходимо по запросу найти в файле строку, содержащее определенное слово и после заменить его на новое.
Содержимое файла bot_users.ini:
76561198350488605 = 20190926211922 20191006000222 0 71791 0 0 KraimLoc
76561198006283363 = 20190926211949 20200726110443 0 71956 0 417 sHERK1
76561198072107799 = 20190926212515 20200727145756 0 72266 0 527 Накурин
76561198868608679 = 20190926215315 20200327061846 0 65996 0 5435 Tolik Odessa
76561198990369306 = 20190926215454 20191207161519 0 71991 0 3591 GoodMan
76561198161930938 = 20190926220107 20200617114901 0 44004 0 Antoxa_102
76561198985130944 = 20190926220336 20191215185342 0 76516 0 4184 МАРВИН
76561198042056253 = 20190926220911 20200722134832 0 85871 0 0 AnaRchisT
76561198880335186 = 20190926221129 20190926221129 0 71791 0 4258 默秋

myfile = 'bot_users.ini'
word = '76561198985130944'
cash = 500
f = open(myfile, 'r+', encoding="utf-8")#открыл файл
for line in f:#читаю строки
    if word in line:#ищу слово word = 76561198985130944 в строках
        new_list = line.split(' ')#создаю список из строки
        print(new_list)#для проверки вывожу на экран
#присваиваю значения        
        steamid = new_list[0]
        name = new_list[8]
        bank = new_list[5]
        newbank = int(bank) + cash#создаю (задаю) новое значение newbank 
        print('New Bank: {}'.format(newbank))#проверка значения newbank 
        print('>>>>>>>>Found: {}\nSteamid: {}\nName: {}\nBank: {}'.format(word, steamid, name, bank))

Вывод:
New Bank: 77016
>>>>>>>>Found: 76561198985130944
Steamid: 76561198985130944
Name: МАРВИН
Bank: 76516
....
Дальше прошу помочь.
Как записать значение newbank вместо bank именно в той строке!
Т.е.
В файле должны сохраниться все строки, а в строке должно быть установлено новое значение
...
76561198985130944 = 20190926220336 20191215185342 0 77016 0 4184 МАРВИН

Спасибо!
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
Ternick
@Ternick
У меня нет слов. Для начала, весь этот код это полный мусор, всё можно в разы понятнее и разумнее написать, а это просто бред.
Далее рекомендовал бы использовать локальную базу данных для хранения всякого хлама вроде этого.
По идее должно работать, я не тестировал.
КОД

myfile = 'bot_users.ini'
word = '76561198985130944'
cash = 500
f = open(myfile, 'r+', encoding="utf-8")#открыл файл
lines = f.read().strip().split("\n")
for line in lines:#читаю строки
	if word in line:#ищу слово word = 76561198985130944 в строках
		lines.remove(line)
		new_list = line.split(' ')#создаю список из строки
		print(new_list)#для проверки вывожу на экран
#присваиваю значения        
		steamid = new_list[0]
		name = new_list[8]
		bank = new_list[5]
		newbank = int(bank) + cash#создаю (задаю) новое значение newbank 
		lines.append(" ".join(new_list).replace(bank, str(newbank)))
		print('New Bank: {}'.format(newbank))#проверка значения newbank
		print('>>>>>>>>Found: {}\nSteamid: {}\nName: {}\nBank: {}'.format(word, steamid, name, bank))
f.truncate(0)
f.write("\n".join(lines))
f.close()

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AndreyGlad
@AndreyGlad Автор вопроса
Ternick Спасибо большое за помощь!

Дополнил код, что бы замена текста происходила в той же строке!

myfile = 'bot_users.ini'
word = '76561198868608679'
cash = 500

f = open(myfile, 'r', encoding="utf-8")#открыл файл
lines = f.read().strip().split("\n")
for i, line in enumerate(lines):#ищу № строки
#for line in lines:#читаю строки# - заменил на строку, указанную выше (что бы определить № строки)
  if word in line:#ищу слово word = 76561198161930938 в строках    
    lines.remove(line)        
    new_list = line.split(' ')          
    steamid = new_list[0]
    name = str(new_list[8])
    bank = new_list[5]
    newbank = int(bank) + cash#создаю (задаю) новое значение newbank 
    new_list[5] = str(newbank)    
    lines.insert(i, " ".join(new_list))#вставляю в туже самую строку данные
    print('New Bank: {}'.format(newbank))#проверка значения newbank
    print('>>>Found!\nLine {}: {}\nSteamid: {}\nName {}\nBank: {}'.format(i, word, steamid, name, bank))
f.close()
f = open(myfile, 'w', encoding="utf-8")
f.write("\n".join(lines))
f.close()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы