【问题标题】:CSV Writer writing over itselfCSV Writer 重写自身
【发布时间】:2011-09-28 15:48:47
【问题描述】:

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

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

我有一个循环遍历一个地方列表以获取 URL 列表。

然后我在该循环中有一个循环,将数据导出到 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 上的第一个空行下方并开始写作?

【问题讨论】:

  • 由于空格在 Python 中非常很重要,请将您的代码重新格式化为可执行文件。
  • @Constantinius 谢谢,我已经编辑了代码,如果你是这个意思,请告诉我,为什么空格在 Python 中如此重要?
  • @Mark 如果您仍然想知道空格这里是一个链接 - secnetix.de/olli/Python/block_indentation.hawk 基本上缩进表示 Python 中函数和语句的开始和结束

标签: python excel csv


【解决方案1】:

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

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 太有用了,更不用说。

【讨论】:

  • 感谢您抽出宝贵时间帮助我,因为我只是一个初学者,能有专家提供很好的建议真是太好了,因为它确实加快了学习过程,再次感谢。
【解决方案2】:

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

【讨论】:

  • 感谢您的帮助,这很奏效,很简单,我将其更改为 ab 模式,并且效果很好。
【解决方案3】:

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

【讨论】:

  • 感谢您在这么快的时间内回答我的问题,我解决了这个问题,知道了下次不要做什么,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多