谁能解释这个错误? AttributeError:'list'对象没有属性'encode'

时间:2015-04-22 19:10:23

标签: python csv unicode encoding utf-8

从我一直在做的研究中,这段代码应该将文本写入CSV文件。

import csv
name = "X"
score = "Y"
with open('some.csv', 'wb') as f:
    writer = csv.writer(f)
    data = [["Name", "Score"],
            [name,score]]
    f.write(data[0].encode('utf-8'))        
    writer.writerows(data)

起初,它给我一个编码错误。在Stack Overflow上搜索之后,我发现需要将文本编码为UTF8。所以我尝试使用X.encode()进行编码。然后我明白了:

f.write(data[0].encode('utf-8'))
AttributeError: 'list' object has no attribute 'encode'

我找不到为什么会发生这种情况的答案。谁能解释为什么我会收到这个错误?

2 个答案:

答案 0 :(得分:2)

使用您创建的csv编写器。不要直接写f。删除f.write行:

import csv
name = "X"
score = "Y"
with open('some.csv', 'wb') as f:
    writer = csv.writer(f)
    data = [["Name", "Score"],
            [name,score]]
    writer.writerows(data)

some.csv的内容:

Name,Score
X,Y

注意这是假设Python 2.如果你实际上在Python 3上,并且正在编写非ASCII字符,open有不同的参数。

#coding:utf8
import csv
name = "马克"
score = "Y"
with open('some.csv', 'w', encoding='utf8', newline='') as f:
    writer = csv.writer(f)
    data = [["Name", "Score"],
            [name,score]]
    writer.writerows(data)

答案 1 :(得分:0)

您收到该错误的原因是您正在尝试编码列表,而不是字符串。

我制作了一个编写" Name"在包含此脚本的.csv文件中。

wchar_t

在我更改的行上,我添加了额外的import csv name = "X" score = "Y" with open('some.csv', 'wb') as f: writer = csv.writer(f) data = [["Name", "Score"], [name,score]] f.write(data[0][0].encode('utf-8')) #<-- Change made here #Removed line here 。您的数据列表是嵌套的,这意味着其中有多个列表。

如果您想获取[0]字符串,则需要引用"Name"。这将获得外部列表中的第一个元素,其中data[0][0]["Name", "Score"]。下一个[0]获取第一个元素是该列表,即"Name"

我摆脱了writer.writerows(data)的界限。它给我一个错误,我不知道它应该做什么。