从CSV读取Unicode

2024-07-04 05:42:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我也试过了编解码器.打开('','','UTF-8')用于阅读和写作,但没有帮助


Tags: 文件csvinforunicodeopen字符reader
1条回答
网友
1楼 · 发布于 2024-07-04 05:42:11

似乎您已经将Python列表直接写入CSV文件,结果是[...]文本语法,而不是普通的列。然后,您删除了可以再次将信息转换回具有unicode字符串的Python列表的大部分信息。

剩下的是pythonicode文本,但没有引号。使用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'..'引号,使用三重引号字符串,以避免需要转义嵌入的引号:

^{pr2}$

如果您仍然有原始文件(带有[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

相关问题 更多 >

    热门问题