【问题标题】:self.encoding_errors & I/O operation on closed fileself.encoding_errors & 对已关闭文件的 I/O 操作
【发布时间】:2016-06-15 15:40:40
【问题描述】:

暂时解决了以下问题。我发现输入文件(csv)具有导致错误的特殊字符(例如 Aimí©)。我现在手动更改字符(例如 Aimí© --> Aime)。

上一个问题:

我在写入 csv 文件时使用unicodecsv。我的程序运行顺利,直到遇到以下错误。有人可以帮忙吗?

代码:

import unicodecsv as csv
output_csv_write = open(csv_file_name_write,'w')
csv_file_write = csv.writer(output_csv_write, encoding='utf-8')
csv_file_write.writerow([An array of info])

第一个错误:

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 3-4: unexpected end of data

看到上述错误后,我尝试通过运行调试:

    csv_file_write.writerow(['A','B','C'])

我收到如下第二个错误:

     84     def writerow(self, row):
     85         return self.writer.writerow(
---> 86                 _stringify_list(row, self.encoding, self.encoding_errors))
     87 
     88     def writerows(self, rows):

ValueError: I/O operation on closed file

【问题讨论】:

  • 我在 Python 2.7.6、unicodecsv 0.14.1 中没有收到该错误。
  • @Robᵩ 我很抱歉。我只是在遇到另一个问题后才意识到它发生了。我正在修改我的问题以提供更多详细信息。
  • 请提供最短的完整程序来证明您遇到的错误。由于错误与数据有关,请包含导致错误的简短样本集。请参阅minimal reproducible example 了解更多信息。
  • 根据 Python 2 csv docscsv 模块处理的文件应该以二进制模式打开(在不同的平台上),这也适用于 unicodecsv,因为这是一个替代品。
  • @Robᵩ 非常感谢您的帮助!我花了一段时间才弄清楚我的代码出了什么问题。我意识到输入文件(csv)具有导致错误的特殊字符(例如 Aimí©)。暂时,我手动更改这些字符(例如 Aimí© --> Aime)以避免问题。

标签: python csv python-unicode


【解决方案1】:

尝试以下方法:

import unicodecsv as csv

with open(csv_file_name_write, "wb") as f:
    writer = csv.writer(f, encoding="utf-8")
    writer.writerow(["A", "B", "C"])

如果这不能解决您的问题,很遗憾,我无法帮助您,因为这是在我的机器上运行的。

【讨论】:

  • 我原来的错误是UnicodeDecodeError: 'utf8' codec can't decode bytes in position 3-4: unexpected end of data
  • "解码"??该示例仅是编码。您确定这实际上是您的问题的原因吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 2016-07-21
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2018-12-18
  • 1970-01-01
相关资源
最近更新 更多