在csv文件python 2中存储unicode字符串列表

时间:2017-11-16 09:45:48

标签: python list csv unicode

我创建了一个函数(parse_html(param)),它返回如下所示的列表,

list = [u'John', u'Muchia', u'Prozessoptimierung Fahrwiderst\xe4nde']

如果我返回print list[2],并且在我的函数中,它会给我Prozessoptimierung Fahrwiderstände这是完美的,但在列表中显示不同

问题在于我返回整个列表return list我想避开'u'。我想存储一个字符串列表,并且还应该出现像äö和ü这样的Unicode字符。

fname [x]是HTML文件的来源,其中x是文件编号,从0增加到count(file_number)

list=[]
newlist=[]    
list = parse_html(fname[7])
for row in list:
  drow = row.encode('utf-8')
  newlist.append(drow)
print newlist

目标是将返回的列表保存为CSV文件。每次选择新文件(fname)时,都会创建列表,并将新列表添加到先前创建的csv文件中。

我正在做一些非常错误的事情,我可以意识到这一点,我的脑袋也很疼。请帮忙。

更新

for x in range(0,count):
    list = parse_html(fname[x])
    with open('output.csv', 'wb') as myfile:
        wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
        wr.writerow(list)

错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 132: ordinal not in range(1
28)

答案:

wr.writerow([c.encode('utf-8') for c in list]) # instead `wr.writerow(list)

2 个答案:

答案 0 :(得分:0)

u前缀仅表示该字符串采用Unicode格式。您的代码没有任何问题,并且代码中的行为正确(就好像它没有u)。它只在print函数中输出,让你知道它是一个Unicode字符串。

答案 1 :(得分:0)

问题出在您的CSV输出代码中。由于您使用的是Python 2,因此在编写之前应直接编码为utf-8:

    wr.writerow([c.encode('utf-8') for c in list])

或者,升级到Python 3以获得更多集成的unicode支持。