在Python

时间:2017-03-14 23:22:05

标签: python csv unicode

嗨,非常感谢提前!

我正在处理一个处理utf-8字符串并替换特定字符的Python脚本。因此,我使用msgText.replace(thePair[0], thePair[1])同时循环定义unicode字符及其所需替换的列表,如下所示。

theList = [
    ('\U0001F601', '1f601.png'),
    ('\U0001F602', '1f602.png'), ...
]

到这里一切正常。但现在考虑一个 csv文件,其中包含要替换的字符,如下所示。

\U0001F601;1f601.png
\U0001F602;1f602.png
...

由于转义字符,我很难将csv数据读入列表。我使用csv模块读取数据,如下所示:

with open('Data.csv', newline='', encoding='utf-8-sig') as theCSV:
    theList=[tuple(line) for line in csv.reader(theCSV, delimiter=';')]

这导致像('\\U0001F601', '1f601.png')这样的对避开转义字符(请注意双反斜杠)。我尝试了几种修改字符串或其他方法来读取csv数据的方法,但我无法解决我的问题。 我怎样才能实现将csv数据读入包含转义字符的对的目标?

1 个答案:

答案 0 :(得分:0)

为了完整起见,我添加了用于读取包含转义字符的csv数据的解决方案。考虑定义替换模式的文件Data.csv

\U0001F601;1f601.png
\U0001F602;1f602.png

简短版本(使用list comprehensions):

import csv

# define replacement list (short version)
with open('Data.csv', newline='', encoding='utf-8-sig') as csvFile:
    replList=[(line[0].encode().decode('unicode-escape'), line[1]) \
        for line in csv.reader(csvFile, delimiter=';') if line]
csvFile.close()

长版(可能更容易理解):

import csv

# define replacement list (step by step)
replList=[]
with open('Data.csv', newline='', encoding='utf-8-sig') as csvFile:
    for line in csv.reader(csvFile, delimiter=';'):
        if line:  # skip blank lines
            replList.append((line[0].encode().decode('unicode-escape'), line[1]))
csvFile.close()