【问题标题】:TypeError: 'str' does not support the buffer interface issueTypeError: 'str' 不支持缓冲区接口问题
【发布时间】:2015-03-20 15:42:33
【问题描述】:

导入 csv 导入运算符

writenames = "col1, Name, col2, col3, col4".split(",")
reader = csv.DictReader(open("Test.csv", "rb"))
writer = csv.DictWriter(open("Test1.csv", "wb"), \
    fieldnames=writenames)
reorderfunct = lambda r: dict([(col, r[col]) for col in writenames])
writer.writeheader()
for row in reader:
    writer.writerow(reorderfunct(row)

输出:

Traceback (most recent call last):
  File "C:\Users\evan.keeler\My Documents\LiClipse Workspace\Test
Test\ColumnSwitch.py", line 10, in <module>
     writer.writeheader()
  File "C:\Python34\lib\csv.py", line 142, in writeheader
    self.writerow(header)
  File "C:\Python34\lib\csv.py", line 153, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
TypeError: 'str' does not support the buffer interface

我不确定这里有什么问题?我知道您必须将字符串转换为字节,但我不确定如何使用此特定示例执行此操作。

【问题讨论】:

    标签: python string python-3.x byte


    【解决方案1】:

    在python3中,csv文件需要以文本模式打开,而不是二进制,需要用newline=''打开。

    reader = csv.DictReader(open("Test.csv", "r", newline=''))
    writer = csv.DictWriter(open("Test1.csv", "w", newline=''), fieldnames=writenames)
    

    这很遗憾只在csv.reader and csv.writer docs:中提到

    如果 csvfile 是一个文件对象,应该用 newline='' 打开它

    虽然 DictReader 和 DictWriter 也需要它。

    只有在python2中才需要以二进制方式打开csv文件。

    【讨论】:

      【解决方案2】:

      您应该以文本模式打开文件,而不是二进制模式。

      reader = csv.DictReader(open("Test.csv", "r"))
      writer = csv.DictWriter(open("Test1.csv", "w"), fieldnames=writenames)
      

      DictReader documentation

      【讨论】:

      • 这样做可以避免错误,但会在每行之后添加一个换行符。 newline='' 就是这样。
      猜你喜欢
      • 2011-07-25
      • 2014-08-09
      • 2023-03-10
      • 1970-01-01
      • 2016-11-21
      • 2016-08-20
      相关资源
      最近更新 更多