Python удалить строку и написать поверх нее - PullRequest
0 голосов
/ 19 июня 2020

у меня есть проплем с моим кодом

я использую для l oop для сохранения результатов в текстовом файле

каждый раз, когда я использую его, он сохраняет последнюю строку и удаляет старую строка

вот код:

                 for i in domains:
                    requests.get(i)
                        if req.status_code == 200:
                            print('[+]:', i + '/')
                            file = open(save,'w')
                            file.write(domain)
                            file.close()

поэтому после запуска кода он сохраняет последний домен или последние результаты и удаляет старые результаты

, поэтому мне нужно решение, спасибо.

Ответы [ 4 ]

1 голос
/ 19 июня 2020

Откройте файл в режиме добавления:

open(filename,'a')

Ваш код должен быть:

for i in domains:
    requests.get(i)
    if req.status_code == 200:
        print('[+]:', i + '/')
        file = open(save,'a')
        file.write(i)
        file.close()
0 голосов
/ 19 июня 2020

Проблема здесь возникает из-за того, что вы открываете файл для записи на каждой итерации 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)

Имейте в виду, что если выходной файл уже существует до программы запускается, то содержимое существующего файла останется, потому что вы всегда открываете его в режиме добавления. В зависимости от вашего приложения это может быть или нежелательно.

0 голосов
/ 19 июня 2020

Вы можете использовать 'a' вместо 'w' в "file = open (save, 'w')"

0 голосов
/ 19 июня 2020

Попробуйте открыть его с помощью a вместо w, поэтому:

file = open(save, 'a')

он должен добавляться в файл, а не писать в него

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...