我在从csv中读取unicode字符时遇到问题。 csv文件最初具有带unicode标记的元素:
"[u'Aeron\xe1utica']"
"[u'Ni\u0161']"
"[u'K\xfcnste']"
... 我必须从中删除你的''使用
提供csv的标签Aeron\xe1utica
Ni\u0161
K\xfcnste
.... 现在我想读取csv并将其输出到带有字符的文件中。
Aeronáutica
Niš
Künste
.... 我尝试在csv docs中使用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')进行阅读和写作,但它没有&#39 ; t help
答案 0 :(得分: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