【问题标题】:CSV file gives error on reading with open() in python 2.7CSV 文件在 python 2.7 中使用 open() 读取时出错
【发布时间】:2017-06-09 16:17:48
【问题描述】:
import unicodecsv
engagement_file=r'G:\college\udacity\intro to data analitics\datasets\daily_engagement.csv'
enrollment_file=r'G:\college\udacity\intro to data analitics\datasets\enrollments.csv'
project_submissions_file=r'G:\college\udacity\intro to data analitics\datasets\project_submissions.csv'
def csv_to_list(csv_file):
    with open(csv_file,'rb') as f:
        reader=unicodecsv.DictReader(f)
    return list(reader)

daily_engagement=csv_to_list(engagement_file)
enrollment=csv_to_list(enrollment_file)
project_submissions=csv_to_list(project_submissions_file)

在执行这段代码时出现以下错误

Traceback (most recent call last):
  File "G:\college\udacity\intro to data analitics\data_analytis_csv_to_list.py", line 10, in <module>
    daily_engagement=csv_to_list(engagement_file)
  File "G:\college\udacity\intro to data analitics\data_analytis_csv_to_list.py", line 8, in csv_to_list
    return list(reader)
  File "C:\ProgramData\Anaconda2\lib\site-packages\unicodecsv\py2.py", line 217, in next
    row = csv.DictReader.next(self)
  File "C:\ProgramData\Anaconda2\lib\csv.py", line 108, in next
    row = self.reader.next()
  File "C:\ProgramData\Anaconda2\lib\site-packages\unicodecsv\py2.py", line 117, in next
    row = self.reader.next()
ValueError: I/O operation on closed file

我不知道如何解决它,我是 python 新手 提前谢谢

【问题讨论】:

  • 投票关闭它,因为这是一个简单的印刷错误 - 您刚刚错过了 return 的一级缩进
  • @ason​​gtoruin 是的,从技术上讲,您可以这么说。但我不认为以拼写错误来结束这个问题是有效的。它源于对上下文管理器工作原理的根本误解。

标签: python csv readfile ioexception python-unicode


【解决方案1】:

在 python 中使用with open() as f: 时,文件f 仅在with 子句打开。这就是使用它的意义所在;它以简单易读的方式提供自动文件关闭和清理。

如果您想处理文件,请在不使用 with 子句的情况下打开它(即直接打开文件)对该文件执行操作inside子句,直接调用为f

【讨论】:

    【解决方案2】:

    您需要将您的报税表移到您的with 声明下。一旦控制流退出with 语句,Python 会自动为您关闭文件。这意味着你必须做的任何文件 I/O 都需要在上下文管理器下完成:

    def csv_to_list(csv_file):
        with open(csv_file,'rb') as f:
            reader = unicodecsv.DictReader(f)
            return list(reader) # return the file under the context manager
    

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2016-06-23
      • 2020-01-29
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      相关资源
      最近更新 更多