簡體   English   中英

使用Python在utf-8中打開CSV文件

[英]Open csv file in utf-8 with Python

我在這里迷失了方向。 我已經閱讀和嘗試了很多東西,以至於我完全迷失了。 我通常不使用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

任何幫助都感激不盡 !

您可以嘗試使用熊貓

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

unicodecsv

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

您可能可以使用pip安裝它們:

點安裝熊貓

點安裝unicodecsv

根據您的需要,您還可以嘗試簡單的字符串操作:

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

更新您也可以嘗試用ASCII等效項替換unicode字符:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM