CSV编写器自己写

时间:2011-09-28 15:48:48

标签: python excel csv

我正在尝试创建一个包含网址列表的CSV文件。

我对编程很陌生,所以请原谅任何草率的代码。

我有一个循环,它通过一系列地点来获取网址列表。

然后我在该循环中有一个循环,将数据导出到CSV文件。

import urllib, csv, re
from BeautifulSoup import BeautifulSoup
list_of_URLs = csv.reader(open("file_location_for_URLs_to_parse"))
for row in list_of_URLs:
    row_string = "".join(row)
    file = urllib.urlopen(row_string)
    page_HTML = file.read()
    soup = BeautifulSoup(page_HTML) # parsing HTML
    Thumbnail_image = soup.findAll("div", {"class": "remositorythumbnail"})
    Thumbnail_image_string = str(Thumbnail_image)
    soup_3 = BeautifulSoup(Thumbnail_image_string)
    Thumbnail_image_URL = soup_3.findAll('a', attrs={'href': re.compile("^http://")})

这部分对我不起作用:

    out  = csv.writer(open("file_location", "wb"), delimiter=";")
    for tag in soup_3.findAll('a', href=True):   
        out.writerow(tag['href'])

基本上,作者一直在写自己,有没有办法跳到CSV上的第一个空行下方并开始写作?

3 个答案:

答案 0 :(得分:4)

不要把它放在任何循环中:

out  = csv.writer(open("file_location", "wb"), delimiter=";")

相反:

with open("file_location", "wb") as fout:
    out = csv.writer(fout, delimiter=";")
    # put for-loop here

注意:

  1. open("file_location", "wb")创建一个新文件,销毁任何同名的旧文件。这就是为什么 看起来像作家正在覆盖旧线。
  2. 使用with open(...) as ...因为它会自动关闭文件 当with-block结束时为你服务。这在文件关闭时明确。否则,文件将保持打开状态(可能未完全刷新),直到out被删除或重新分配给新值。这不是你的主要问题,但使用with太有用了,更不用说了。

答案 1 :(得分:1)

您是在每次写入后关闭文件,还是在每次写入之前打开文件?检查一下。
另外,尝试使用“ab”模式而不是“wb”。 “ab”将附加到文件中。

答案 2 :(得分:0)

您为每个网址执行一次的open("file_location", "wb")调用,正在消除您之前对该文件所做的操作。将其移到for循环之外,以便只为所有网址打开一次。