【问题标题】:Adding a column containing screen-scraped values to a CSV file将包含屏幕抓取值的列添加到 CSV 文件
【发布时间】:2011-04-05 12:03:20
【问题描述】:

我正在绘制一张在德克萨斯州埃尔帕索颁发的建筑许可证地图。这是我第一次涉足 python 的奇妙世界,很有趣,但我想不出 csv 模块来挽救我的生命。

我有一个 .csv 文件,其中包含我需要添加的字段“日期”、“建筑物编号”、“建筑物类型”、“描述”、“项目名称”、“到期日期”、“状态”一个名为“地址”的列,其中包含与每个建筑物编号相关联的地址。

我已经得到了使用建筑许可证编号获取地址的代码,但是我不知道如何按顺序获取每个建筑编号,使用它来获取许可证的地址,然后将其写入新的“地址”列。为什么他们不能一开始就将地址放在 .csv 文件中,这超出了我的理解。

这是我目前获得的地址:

from BeautifulSoup import BeautifulSoup
import urllib

CaseNo = "RSP11-00459"    # this is an example of the building permit number format
DBaseEntry = urllib.urlopen("http://permits.elpasotexas.gov/tm_bin/tmw_cmd.pl?tmw_cmd=StatusViewCase&shl_caseno=%s " % CaseNo)
Soup = BeautifulSoup(DBaseEntry.read())
Dang = Soup.findAll("td", { "class" : "ReportCell"})[5]
Address = str(Dang)
TableEntry = Address[23:-5].strip( )
print TableEntry

这很不雅,但我需要一种方法将建筑物编号值作为 CaseNo,然后将 TableEntry 写入(新创建的)地址列的值。 如果重要的话,这些表每个都有 100 行。

有什么想法/建议吗?

【问题讨论】:

  • 你能把名字小写吗?为类保留大写名称。
  • 您说“我无法弄清楚 csv 模块”,但接着问了一个关于 BeautifulSoup 的问题——您能澄清一下吗? “我需要一种方法来获取建筑编号值作为 CaseNo”对我来说也没有意义。

标签: python csv


【解决方案1】:

不太确定我是否完全理解您的问题,但如果是关于使用 CSV 模块,那么您的代码应该如下所示:

import csv,os

with open('foo.csv', 'rb') as r, open('foo.tmp', 'wb') as w:
    reader = csv.reader(r)
    writer = csv.writer(w)

    for row in reader:
        newrow=whatever_processing_you_need(row)
        writer.writerow(newrow)

os.unlink('foo.csv')
os.rename('foo.tmp','foo.csv')

【讨论】:

    【解决方案2】:

    据我了解,您使用报告的代码获得了地址,现在您想将此地址附加到您的 csv 文件中。如果是这样,我会使用@bdev 解决方案,并且“whatever_processing_you_need”将简单地转换为:“找到您检索到的地址的相应行并将地址附加到最后一列”。

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多