Python – как экспортировать каждый элемент списка в отдельный текстовый файл

У меня есть файл csv из пары десятков веб-страниц, которые я пытаюсь перебрать.

Цель состоит в том, чтобы получить текст с веб-страницы, удалить html-разметку (используя html2text), а затем сохранить чистый текст в виде файла .txt. Моя идея заключалась в том, чтобы сохранить чистый текст каждой веб-страницы в виде элемента списка, а затем экспортировать каждый элемент списка в текстовый файл.

Я могу заставить программу перебирать URL-адреса и вынимать html, но сохранение в отдельные файлы txt продолжает выдавать ошибку. Может ли кто-нибудь дать мне несколько идей о том, как это сделать?

Код:

from stripogram import html2text
import urllib
import csv

text_list = []
urls = csv.reader(open('web_links2.csv'))

for url in urls:
    response = urllib.urlopen(url[0])
    html = response.read()
    text = html2text(html)
    text_list.append(text)

print text_list

for item in text_list:
    f = open('c:\users\jacob\documents\txt_files\%s.txt'%(item,), 'w')
    f.write(item)
    f.close

person Jacob Ledbetter    schedule 27.01.2015    source источник
comment
Что за ошибка вылетает и где она возникает?   -  person Scott Hunter    schedule 27.01.2015


Ответы (3)


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

Также определение пути к файлу должно быть другим, попробуйте использовать двойные кавычки и \ вместо . Возможно, вы захотите сделать что-то вроде этого:

i = 0
for item in text_list:
    i += 1
    #also use format instead of the %s
    f = open("c:\\users\\jacob\\documents\\txt_files\\{0}.txt".format(i), 'w')
    f.write(item)
    f.close()
person Steven Stip    schedule 27.01.2015

Похоже, вы используете одно и то же значение (item) как для имен файлов, так и для их содержимого, поэтому, если эти файлы не являются отдельными словами, вы, вероятно, создаете недопустимые имена файлов.

Кроме того, чтобы вызвать close, вам нужно поставить круглые скобки.

person Scott Hunter    schedule 27.01.2015

Ваша основная проблема заключается в том, что вы не избегаете использования необработанной строки t r:

open(r'c:\users\jacob\documents\txt_files\%s.txt'%(item,), 'w')

\t — это табуляция, поэтому используйте необработанную строку, как в примере, двойную \\ или косую черту / в пути к файлу.

In [11]: s = "\txt_files"

In [12]: print(s)
    xt_files

In [13]: s = r"\txt_files"

In [14]: print(s)
\txt_files


f.close <- missing parens to call the method

Используйте with, чтобы открыть файл, и такие вещи, как забывание вызова close, не будут проблемой:

with open(r'c:\users\jacob\documents\txt_files\%s.txt'%(item,), 'w') as f: # closes your files automatically
    f.write(item)
person Padraic Cunningham    schedule 27.01.2015