Как мне заменить строки в цикле for

#python #python-3.x #file

#python #python-3.x #файл

Вопрос:

Файл, который я редактирую

 45940736:1330:0.266667:1602990684:10023084.555000
48545806:16000000:0.000000:9999999999:0.000000
1191125008:1185:37.408333:1602991293:10282893.310000
116776982:1811:0.637500:1602990076:10022476.137000
  

Мой код

 f = open("values", "r ")
lines = f.readlines()

for i in lines:
    if str(IDS) in i:
        spl = i.split(":")
        asset_id = spl[0]
        value = spl[1]
        volume = spl[2]
        updated = spl[3]
        item_age = spl[4]
        new_line = asset_id   ":"   "this is a test"   ":"  volume   ":"   updated   ":"   item_age
        old_line = i
        print(new_line) 
  

Как бы я заменил строку в цикле for вместо выполнения

 lines[0] = new_line
ff = open('values', 'w')
ff.writelines(lines)
  

Я не могу этого сделать, потому что некоторые файлы будут иметь значения 2k, и мне нужно изменить их все.

Комментарии:

1. Помимо этого, вы можете сделать разделение и объединение более элегантными: spl[1] = "this is a test"; new_line = ':'.join(spl)

Ответ №1:

Используйте enumerate() , чтобы получить индекс в списке, чтобы вы могли заменить элемент.

 for index, i in enumerate(lines):
    if str(IDS) in i:
        spl = i.split(":")
        asset_id = spl[0]
        value = spl[1]
        volume = spl[2]
        updated = spl[3]
        item_age = spl[4]
        new_line = asset_id   ":"   "this is a test"   ":"  volume   ":"   updated   ":"   item_age
        old_line = i
        lines[index] = new_line