Как записать вывод цикла в файл?
Цикл проходит адреса из текстового файла:
...
https://github.com/22982
https://digitalocean.com
https://www.linux.org.ru/
Цель записать вывод цикла в файл. Сам цикл:
for url in urls:
r = requests.get(url)
sc = r.status_code
if sc == 200:
valid = 'Valid'
else:
valid = "Not valid"
with open('out.txt', 'w') as f:
print(f'URL: {url}', f'Status code: {sc}', f'{valid}', file=f)
В текущем виде, в файл записывается только последняя итерация.
Подскажите, как записать весь вывод?
Ответы (2 шт):
Вы каждую итерацию открываете файл в режиме w, тем самым удаляя то, что в нем есть, и пишете новую строку... Смените режим на a
with open('out.txt', 'a') as f:
Режимы открытия файлов:
'r' открытие на чтение (является значением по умолчанию).
'w' открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
'x' открытие на запись, если файла не существует, иначе исключение.
'a' открытие на дозапись, информация добавляется в конец файла.
'b' открытие в двоичном режиме.
't' открытие в текстовом режиме (является значением по умолчанию).
'+' открытие на чтение и запись
Или же пройдитесь по списку адресов, сохраняя результат:
check_list = []
for url in urls:
r = requests.get(url)
status = r.status_code
desc = 'valid' if status == 200 else 'invalid'
check_list.append(f'URL: {url}, status code: {status} ({desc})')
в check_list у вас теперь все результаты:
>>> check_list
[
'URL: https://github.com/22982, status code: 404 (invalid)',
'URL: https://digitalocean.com, status code: 200 (valid)',
'URL: https://www.linux.org.ru, status code: 200 (valid)'
]
и запишите все сразу:
with open('out.txt', 'w') as f:
f.writelines(f'{row}\n' for row in check_list)
import requests
urls = [
'https://github.com/22982',
'https://digitalocean.com',
'https://www.linux.org.ru/'
]
with open('out.txt', 'w') as f:
for url in urls:
r = requests.get(url)
sc = r.status_code
if sc == 200:
valid = 'Valid'
else:
valid = "Not valid"
print(f'URL: {url}', f'Status code: {sc}', f'{valid}', file=f)