Python - 如何将列表中的每个项目导出到单个文本文件

时间:2015-01-27 15:38:01

标签: python loops csv web-scraping output

我有一个包含几十个网页的csv文件,我试图循环播放。

目标是从网页获取文本,取出html标记(使用html2text),然后将干净的文本保存为.txt文件。我的想法是将每个网页的干净文本保存为列表中的项目,然后将列表中的每个项目导出到txt文件。

我可以让程序循环遍历网址并取出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

3 个答案:

答案 0 :(得分:0)

看起来您对文件名称及其内容使用相同的值(item),因此除非这些文件是单个单词,否则您可能会生成非法文件名。

另外,要拨打close,您需要提供括号。

答案 1 :(得分:0)

您的主要问题是您没有转义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 open(r'c:\users\jacob\documents\txt_files\%s.txt'%(item,), 'w') as f: # closes your files automatically
    f.write(item)

答案 2 :(得分:-1)

我认为您可能不想将完整项目添加到文件名,因为该项目是网页的所有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()