【问题标题】:Python writer.writerow(data) ValueError: I/O operation on closed file [closed]Python writer.writerow(data)ValueError:关闭文件上的I / O操作[关闭]
【发布时间】:2015-12-25 19:52:22
【问题描述】:

为什么我会收到错误valueerror:I/O operation on closed file

import urllib2
import csv


from bs4 import BeautifulSoup

url = "http://www.tendersinfo.com/rss/index.php?sector_name=0202&notice_type=1,2,3,7,10,11,16,8"

with open('tender.csv', 'w') as csvfile:
    fieldnames = ['TITLE', 'LINK', 'DESCRIPTION']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer = csv.writer(csvfile, delimiter=',')

    resource = urllib2.urlopen(url)
    url = resource.read()
    soup = BeautifulSoup(url)
    soup.prettify()

    title = soup.find_all('title')
    link = soup.find_all('link')
    description = soup.find_all('description')

listIterator = []
listIterator[:] = range(2, 16)
for i in listIterator:
    data = [[title[i].get_text('')]]
    writer.writerow(data)

这里是错误:

C:\Python27\python.exe D:/PycharmProjects/tenderinfo/tendorinfo.py Traceback(最近一次通话最后一次):文件 “D:/PycharmProjects/tenderinfo/tendorinfo.py”,第 32 行,在 writer.writerow(data) ValueError: I/O operation on closed file

进程以退出代码 1 结束

我需要废弃该链接并将其放入 csv 文件中。请帮忙。

【问题讨论】:

  • 在 python 中缩进不是可选的...
  • 你为什么要创建一个 DictWriter 和一个 writer 而不是仅仅创建一个 writer 并将字段名写成一行?

标签: python xml csv web-scraping beautifulsoup


【解决方案1】:

这是一个缩进问题。将最后一个块移动到with 正文下:

with open('tender.csv', 'w') as csvfile:
    # ...

    # the following block should also be under "with" since it uses "writer"
    # which writes to csvfile that needs to be opened for writing at this moment
    listIterator = []
    listIterator[:] = range(2, 16)
    for i in listIterator:
        data = [[title[i].get_text('')]]
        writer.writerow(data)

【讨论】:

  • 我是 python 编程的新手,所以有缩进问题,你能把正确格式的代码行放在这里,以便我可以使用 beautifulsoup 将 XML 解析为 csv
猜你喜欢
  • 2016-03-06
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2013-09-27
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
相关资源
最近更新 更多