TypeError: 'str' does not support the buffer interface issue
TypeError: 'str' does not support the buffer interface issue
导入 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
我不确定这里有什么问题?我知道您必须将字符串转换为字节,但我不确定如何在这个特定示例中执行此操作。
您应该以文本模式而不是二进制模式打开文件。
reader = csv.DictReader(open("Test.csv", "r"))
writer = csv.DictWriter(open("Test1.csv", "w"), fieldnames=writenames)
在python3中,csv文件需要以文本模式打开,而不是二进制,并且需要用换行符=''打开。
reader = csv.DictReader(open("Test.csv", "r", newline=''))
writer = csv.DictWriter(open("Test1.csv", "w", newline=''), fieldnames=writenames)
不幸的是,这仅在 csv.reader and csv.writer docs:
中提及
If csvfile is a file object, it should be opened with newline=''
虽然DictReader和DictWriter也需要它。
仅 python2 需要以二进制模式打开 csv 文件。
导入 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
我不确定这里有什么问题?我知道您必须将字符串转换为字节,但我不确定如何在这个特定示例中执行此操作。
您应该以文本模式而不是二进制模式打开文件。
reader = csv.DictReader(open("Test.csv", "r"))
writer = csv.DictWriter(open("Test1.csv", "w"), fieldnames=writenames)
在python3中,csv文件需要以文本模式打开,而不是二进制,并且需要用换行符=''打开。
reader = csv.DictReader(open("Test.csv", "r", newline=''))
writer = csv.DictWriter(open("Test1.csv", "w", newline=''), fieldnames=writenames)
不幸的是,这仅在 csv.reader and csv.writer docs:
中提及If csvfile is a file object, it should be opened with newline=''
虽然DictReader和DictWriter也需要它。
仅 python2 需要以二进制模式打开 csv 文件。