Python 有人能解释这个错误吗?属性错误:';列表';对象没有属性';编码';

Python 有人能解释这个错误吗?属性错误:';列表';对象没有属性';编码';,python,csv,unicode,encoding,utf-8,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)

根据我所做的研究,这段代码应该将文本写入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)
起初,它给了我一个编码错误。在查找堆栈溢出后,我发现需要将文本编码为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
导入csv
name=“X”
score=“Y”
以open('some.csv','wb')作为f:
writer=csv.writer(f)
数据=[[“名称”,“分数”],
[姓名、分数]]

f、 写入(数据[0][0]。编码(“utf-8”)#使用您创建的csv写入程序。不要直接写
f
。删除
f.写入
行:

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
注意,这是假设Python2。如果您实际使用的是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)

数据[0]
不是字符串。谢谢您的回答。我还有一个问题:假设name和score变量是用户输入,即input()。如何写入name和score变量,然后向下移动单元格并重复?我以为这是新行,但这似乎起到了其他作用。
writerows
获取了如上所示的列表
writerow
获取行中元素的单个列表。因此,对于要添加的每一行,只需说
writer.writerow([name,score])
。csv.writer
负责添加分隔符和换行符。