Can anyone explain this error? AttributeError: 'list' object has no attribute 'encode'

Can anyone explain this error? AttributeError: 'list' object has no attribute 'encode'

根据我一直在做的研究,这段代码应该将文本写入 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'

我找不到关于为什么会这样的答案。谁能解释为什么我会收到此错误?

您收到该错误的原因是您尝试对列表而不是字符串进行编码。

我用这个脚本在 .csv 文件中编写了一个工作代码 "Name"。

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]得到第一个元素就是那个list,也就是"Name".

我用 writer.writerows(data) 去掉了那一行。它向我抛出一个错误,我不知道它应该做什么。

使用您创建的 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)