Read Unicode from CSV



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

  1. "[u'Aeronxe1utica']"
  2. "[u'Niu0161']"
  3. "[u'Kxfcnste']"

我不得不从中删除u''标签,以提供带有的csv

  1. Aeronxe1utica
  2. Niu0161
  3. Kxfcnste

现在我想读取csv并将其输出到具有字符的文件中,即

  1. Aeronáutica
  2. Niš
  3. Künste

我尝试在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])

我还尝试了codecs.open('','','UTF-8')进行读写,但它对没有帮助

您似乎已经将Python列表直接写入CSV文件,从而产生了[...]文本语法,而不是普通列。然后,您删除了大部分本可以用于将信息再次返回到带有unicode字符串的Python列表的信息。

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

with open('foo.csv','r') as b0rken
    for line in b0rken:
        value = line.rstrip('rn').decode('unicode_escape')
        print value

或者添加回u'..'引号,使用三重引号字符串,以避免需要转义嵌入的引号:

with open('foo.csv','r') as b0rken
    for line in b0rken:
        value = literal_eval("u'''{}'''".format(line.rstrip('rn')))
        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_escape:演示

>>> for line in b0rken:
...     print line.rstrip('rn').decode('unicode_escape')
... 
Aeronáutica
Niš
Künste
École de l'Air

最新更新