Python 从CSV读取Unicode

Python 从CSV读取Unicode,python,csv,unicode,Python,Csv,Unicode,我在从csv读取unicode字符时遇到问题。csv文件最初包含带有unicode标记的元素: [u'Aeron\xe1utica'] [u'Ni\u0161'] [u'K\xfcnste'] ... 我必须从中删除u标记,以获得csv 航空公司 Ni\u0161 K\xfcnste .... 现在我想读取csv并将其输出到一个带有字符的文件中,即 尤蒂卡航空公司 尼什 昆斯特 .... 我尝试在中使用UnicodeWriter,但它提供的输出与第二个列表相同 以下是我读和写的内容: c = o

我在从csv读取unicode字符时遇到问题。csv文件最初包含带有unicode标记的元素:

[u'Aeron\xe1utica'] [u'Ni\u0161'] [u'K\xfcnste'] ... 我必须从中删除u标记,以获得csv

航空公司 Ni\u0161 K\xfcnste .... 现在我想读取csv并将其输出到一个带有字符的文件中,即

尤蒂卡航空公司 尼什 昆斯特 .... 我尝试在中使用UnicodeWriter,但它提供的输出与第二个列表相同

以下是我读和写的内容:

c = open('foo.csv','r')
r = csv.reader(c)
for row in reader:
p = p + row
#The elements in p were ['Aeron\\xe1utica', 'Ni\\u0161', 'K\\xfcnste'...]
c = open('bar.csv','w')
c.write(codecs.BOM_UTF8)
writer = UnicodeWriter(c)
for row in p:
writer.writerow([row])

我还尝试了codecdes.open、'UTF-8'进行读写,但没有任何帮助。

似乎您已经将Python列表直接写入了CSV文件中,导致出现了[…]文本语法而不是普通列。然后,您删除了本可以用来再次将信息转换回带有unicode字符串的Python列表的大部分信息

剩下的是Python unicode文本,但没有引号。使用unicode_转义再次将值解码为unicode:

with open('foo.csv','r') as b0rken
    for line in b0rken:
        value = line.rstrip('\r\n').decode('unicode_escape')
        print value
或者使用三重引号字符串添加回u“…”引号,以避免需要转义嵌入引号:

with open('foo.csv','r') as b0rken
    for line in b0rken:
        value = literal_eval("u'''{}'''".format(line.rstrip('\r\n')))
        print value
如果原始文件中仍有[u'…']格式的行,请使用ast.literal_eval函数将这些行转换回Python列表。此处使用CSV模块没有意义:

from ast import literal_eval

with open('foo.csv','r') as b0rken
    for line in b0rken:
        lis = literal_eval(line)
        value = lis[0]
        print value
unicode_转义的演示:


不需要,您不需要删除u。这些是Unicode值,您需要Unicode值。当读取带有编码字符的CSV时,为什么不使用UnicodeReader?为了澄清:[u'Aeron\xe1utica']是您文件中的文本吗?如果不是,是什么?@MartijnPieters作业需要删除它们。我在电子表格中删除了它们。@KBhokray:然后你在创建电子表格时出错了。您正在查看repr字符串表示法,这是一种调试辅助工具。例如,当打印时将列表转换为字符串时,所有内容都显示为repr值,这是一个str值,表示每个元素的实际内容。谢谢,差不多了,但有一个小问题。某些元素中已经有“字符”,例如:\xc9cole de l'Air。这是一个错误文件,第1行u'\xc9cole de l'Air'^SyntaxError:无效语法当然,我可以很容易地替换它来克服它,但任何直接方法都会更有效helpful@KBhokray:只需使用unicode_转义方法或使用三重引号字符串。
>>> for line in b0rken:
...     print line.rstrip('\r\n').decode('unicode_escape')
... 
Aeronáutica
Niš
Künste
École de l'Air