Объясните поведение моего цикла python
В общем, есть файл csv типа, в котором 2 столбца, разделенных точкой с запятой. Часть нужной мне инфы в левом столбце, часть в правом Если запись содержит 'some100' в левой части - нужная мне инфа в правой.
Данным кодом я решаю свою задачу, но он не работает в один этап. Чтобы решить свою задачу мне нужно сначала записать non-target, комментируя остальное, затем target. Если запускаю всё вместе - target возвращает пустой список.
С чем это связано?
def check_and_replace():
f = open('PATH\\link_list.txt', 'r')
non_target = [i for i in f if 'some100' not in i.split(';')[0]]
target = [i for i in f if 'some100' in i.split(';')[0]]
f = open('PATH\\new_link_list.txt', 'a')
for i in target:
f.write(i.replace('http://site.ru/?action=some100;', ''))
for i in non_target:
f.write(i)
Ответы (1 шт):
Проблема связанна скорее всего с тем что чтение из файла идёт с помощью буферизации, и после первого прохода в цикле данные из буфера удаляются.
non_target = [i for i in f if 'some100' not in i.split(';')[0]]
после этого цикла буфер пустой.
Попробуйте обработать содержимое файла в одном цикле. Заменив вот это
non_target = [i for i in f if 'some100' not in i.split(';')[0]]
target = [i for i in f if '`введите сюда код`some100' in i.split(';')[0]]
на
non_target = []
target = []
for i in f:
if 'some100' not in i.split(';')[0]:
non_target.append(i)
else:
target.append(i)
f.close()