2

我在这里失去理智。我已经阅读并尝试了很多东西,以至于我完全迷失了。我通常不使用 Python,我正在尝试更新代码。以前,csv 文件不包含任何特殊字符(如“é”...),现在它包含。实际代码返回异常 UnicodeEncodeError :

try:
        self.FichierE = codecs.open(self.CheminFichierE,"r", "utf-8")
        self.ReaderFichierE = csv.reader(self.FichierE, delimiter=';')
    except IOError:
        self.TextCtrl.AppendText(u"Fichier E n'a pas été trouvé")
        return

try:
        DataFichierE = [ligne for ligne in self.ReaderFichierE]
    except UnicodeDecodeError:
        self.TextCtrl.AppendText(self.NomFichierE+ u" n'est pas lisible")
        return
    except UnicodeEncodeError:
        self.TextCtrl.AppendText(self.NomFichierE+ u" n'est pas lisible (ASCII)")
        return

我已经尝试了很多东西,我只是把我做的最后一件事(我认为它应该工作):

try:
        DataFichierE = []
        for utf8_row in self.ReaderFichierE:
            unicode_row = [x.decode('utf8') for x in utf8_row]
            DataFichierE.append(unicode_row)
    except UnicodeDecodeError:
        self.TextCtrl.AppendText(self.NomFichierE+ u" n'est pas lisible")
        return
    except UnicodeEncodeError:
        self.TextCtrl.AppendText(self.NomFichierE+ u" n'est pas lisible (ASCII)")
        return

任何帮助都感激不尽 !

4

1 回答 1

1

You can try using pandas.

import pandas
myfile = open('myfile.csv')
data = pandas.read_csv(myfile, encoding='utf-8', quotechar='"', delimiter=';')
print(data.values)

or unicodecsv

import unicodecsv
myfile = open('myfile.csv')
data = unicodecsv.reader(myfile, encoding='utf-8', delimiter=';')
for row in data:                                                 
    print row

You may be able to install them using pip:

pip install pandas

pip install unicodecsv

Depending on your needs you may also try simple string operations:

data = [line.strip().split(';') for i, line in enumerate(open('./foo.csv').readlines()) if i != 0]

Update You can also try replacing unicode characters with ASCII equivalents:

from StringIO import StringIO
import codecs
import unicodedata

...

    try:
        self.FichierE =  StringIO(
            unicodedata.normalize(
                'NFKD', codecs.open(self.CheminFichierE, "r", "utf-8").read()
            ).encode('ascii', 'ignore'))
        self.ReaderFichierE = csv.reader(self.FichierE, delimiter=';')

    except IOError:
        self.TextCtrl.AppendText(u"Fichier E n'a pas été trouvé")
        return

    try:
        DataFichierE = [ligne for ligne in self.ReaderFichierE]
    except UnicodeDecodeError:
        self.TextCtrl.AppendText(self.NomFichierE+ u" n'est pas lisible")
        return
    except UnicodeEncodeError:
        self.TextCtrl.AppendText(self.NomFichierE+ u" n'est pas lisible (ASCII)")
        return
于 2013-09-03T11:25:25.100 回答