Как читать строки CSV или текстового файла, перебирать каждую строку и сохранять в новый файл для каждой прочитанной строки

У меня есть уникальная проблема, которую, как я думал, я решил, пока я не уперся в стену, используя цикл While Loop для управления ходом этой программы.

Сводка:

У меня есть плоский файл (CSV или текст) с некоторыми URL-адресами, которые я хочу очистить, добавить новый тег в HTML с помощью BeautifulSoup (который работал), а затем сохранить каждый очищенный URL-адрес под новым именем файла.

Что мне нужно:

  1. Перебирать каждую строку
  2. Получить URL
  3. Очистите страницу каждого URL
  4. Добавить новый HTML-тег
  5. Сохраните файл, используя имя HTML-файла, если это возможно.
  6. Снова перезапустите ту же программу, где она перейдет к следующей строке.

Я очень уверен, что это связано с тем, что я не могу понять основы, я все еще пытаюсь понять это. Вот мой код:

Что случилось:

Используя Python3, код действительно работает, я использовал Jupyter для построчного просмотра кода и серии операторов печати, чтобы увидеть, что возвращается при запуске цикла While Loop.

Проблема в том, что сохраняется только один файл, а URL в конце файла - единственное, что сохраняется. Остальные URL-адреса очищаются.

Как сделать так, чтобы каждая строка повторялась и очищалась для уникального сохранения перед переходом к следующей строке? Я неправильно использую эти конструкции?

URL:

https://www.imgacademy.com/media/headline/img-academy-alumna-jacqueline-bendrick-ready-tee-against-men-golfbc-championship

https://www.imgacademy.com/media/headline/img-academy-u19-girls-win-fysa-state-cup-u19-championship

https://www.imgacademy.com/media/headline/img-academy-celebrates-largest-commencement-ceremony-date-200-ascenders-earn

Код:

import csv
import requests
from bs4 import BeautifulSoup as BS

filename = 'urls.csv'

with open(filename, 'r+') as file:


    while True:

        line = file.readline()

        user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0'

        headers = {'User-Agent':user_agent}

        response = requests.get(line, headers)

        print(response)

        soup = BS(response.content, 'html.parser')

        html = soup

        title = soup.find('title')
        meta = soup.new_tag('meta')
        meta['name'] = "robots"
        meta['content'] = "noindex, nofollow"
        title.insert_after(meta)

        for i 
        with open('{}'".txt".format("line"), 'w', encoding='utf-8') as f:
            outf.write(str(html))

            if (line) == 0:
                break

person Chad Buie    schedule 15.03.2018    source источник
comment
Хорошо, я решил это сам. Мне нужен был цикл for, который использовал функцию индекса и перечисления, чтобы убедиться, что цикл запущен, запустил код / ​​очистку, а затем скорректировал с помощью открытой процедуры, которая нарезала переменную (уберите материал http и сохраните реальное имя файла) и таким образом сохраняя файл.   -  person Chad Buie    schedule 15.03.2018


Ответы (1)


person    schedule
comment
'r +' - неправильный файловый режим. print(line) в строке 7 приведет к NameError, потому что line в этот момент не определено. enumerate() не имеет смысла, потому что index нигде не используется. Наличие имен soup и html для одного и того же объекта затрудняет выполнение кода. - person BlackJack; 20.03.2018
comment
Программа действительно работала у меня на самом деле неплохо, однако я попробую ваши предложения. - person Chad Buie; 22.03.2018