Проблема здесь возникает из-за того, что вы открываете файл для записи на каждой итерации l oop. Поскольку вы открываете файл в режиме 'w'
, файл каждый раз перезаписывается. (См. документацию .)
Было бы лучше открыть файл только один раз, за пределами l oop.
Например:
file = open(save, 'w')
for i in domains:
# do some stuff...
file.write(some_data)
file.close()
Вы также можете использовать with
вместе с функцией open
:
with open(save, 'w') as file:
for i in domains:
# do some stuff...
file.write(some_data)
В этом случае нет необходимости в явном вызове file.close()
. Это будет сделано автоматически, когда l oop закончится, или даже если что-то произойдет внутри блока with
, например, возникнет исключение (т.е. возникнет ошибка) или return
из функции (если применимо).
Имейте в виду, что из-за буферизации вывода данные, записанные в файл во время одной итерации, могут фактически не записываться в файл до следующей итерации или после закрытия файла. Если это будет проблемой, то вы можете вставить вызов flush
для принудительной низкоуровневой записи, чтобы другие процессы могли видеть данные:
with open(save, 'w') as file:
for i in domains:
# do some stuff...
file.write(some_data)
file.flush()
Если есть какая-то причина, почему вам нужно откройте файл внутри l oop, затем вы можете открыть его в режиме добавления, используя 'a'
, и данные будут записаны после конца существующего файла. (Опять же, см. Документацию, связанную ранее.) Например:
for i in domains:
# do some stuff...
file = open(save, 'a')
file.write(some_data)
file.close()
или еще раз, лучше так:
for i in domains:
with open(save, 'a') as file:
# do some stuff...
file.write(some_data)
Имейте в виду, что если выходной файл уже существует до программы запускается, то содержимое существующего файла останется, потому что вы всегда открываете его в режиме добавления. В зависимости от вашего приложения это может быть или нежелательно.