Как сохранить несколько выходных данных в несколько файлов, где каждый файл имеет другой заголовок из объекта в python?

Я соскабливаю rss-канал с веб-сайта ( http://www.gfrvitale.altervista.org/index.php/autismo-in?format=feed&type=rss ).
Я написал сценарий для извлечения и очистки текста из каждого канала. Моя главная проблема состоит в том, чтобы сохранить каждый текст каждого элемента в другом файле, мне также нужно назвать каждый файл с его правильным названием extractet из элемента.
Мой код:

for item in myFeed["items"]:
    time_structure=item["published_parsed"]
    dt = datetime.fromtimestamp(mktime(time_structure))

    if dt>t:

     link=item["link"]           
     response= requests.get(link)
     doc=Document(response.text)
     doc.summary(html_partial=False)

     # extracting text
     h = html2text.HTML2Text()

     # converting
     h.ignore_links = True  #ignoro i link
     h.skip_internal_links=True  #ignoro i link esterni
     h.inline_links=True
     h.ignore_images=True  #ignoro i link alle immagini
     h.ignore_emphasis=True
     h.ignore_anchors=True
     h.ignore_tables=True

     testo= h.handle(doc.summary())  #testo estratto

     s = doc.title()+"."+" "+testo  #contenuto da stampare nel file finale

     tit=item["title"]

     # save each file with it's proper title
     with codecs.open("testo_%s", %tit "w", encoding="utf-8") as f:
         f.write(s)
         f.close()

Ошибка:

File "<ipython-input-57-cd683dec157f>", line 34 with codecs.open("testo_%s", %tit "w", encoding="utf-8") as f:
                                 ^
SyntaxError: invalid syntax

2 ответа

  1. Вы должны поставить запятую после %tit

    должно быть:

    #save each file with it's proper title
    with codecs.open("testo_%s" %tit, "w", encoding="utf-8") as f:
         f.write(s)
         f.close()
    

    Однако если имя файла содержит недопустимые символы, оно возвращает ошибку (i.e [Errno 22])

    Вы можете попробовать этот код:

    ...
    tit = item["title"]
    tit = tit.replace(' ', '').replace("'", "").replace('?', '') # Not the best way, but it could help for now (will be better to create a list of stop characters)
    
    with codecs.open("testo_%s" %tit, "w", encoding="utf-8") as f:
         f.write(s)
         f.close()
    

    Другой способ использования nltk:

    from nltk.tokenize import RegexpTokenizer
    tokenizer = RegexpTokenizer(r'\w+')
    tit = item["title"]
    tit = tokenizer.tokenize(tit)
    tit = ''.join(tit)
    with codecs.open("testo_%s" %tit, "w", encoding="utf-8") as f:
         f.write(s)
         f.close()
    
  2. Во-первых, вы потеряли запятую, она должна быть после %titне раньше.

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

    with open("testo_%s" %tit, "w", encoding="utf-8") as f:
         f.write(s)