我在从csv中读取unicode字符时遇到问题。csv文件最初包含带有unicode标记的元素:
"[u'Aeronxe1utica']"
"[u'Niu0161']"
"[u'Kxfcnste']"
我不得不从中删除u''标签,以提供带有的csv
Aeronxe1utica
Niu0161
Kxfcnste
现在我想读取csv并将其输出到具有字符的文件中,即
Aeronáutica
Niš
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