1

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

  1. "[u'Aeron\xe1utica']"
  2. "[u'Ni\u0161']"
  3. "[u'K\xfcnste']" ...

我必须从中删除 u'' 标签才能给出一个 csv

  1. Aeron\xe1utica
  2. Ni\u0161
  3. K\xfcnste ……

现在我想读取 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') 进行读写,但没有帮助

4

1 回答 1

0

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

你剩下的是 Python unicode 文字,但没有引号。使用unicode_escape再次将值解码为 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_escape

>>> for line in b0rken:
...     print line.rstrip('\r\n').decode('unicode_escape')
... 
Aeronáutica
Niš
Künste
École de l'Air
于 2013-07-08T12:22:53.443 回答