我在这里失去理智。我已经阅读并尝试了很多我完全失去的东西。 我通常不使用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
非常感谢任何帮助!
答案 0 :(得分:1)
您可以尝试使用pandas。
import pandas
myfile = open('myfile.csv')
data = pandas.read_csv(myfile, encoding='utf-8', quotechar='"', delimiter=';')
print(data.values)
import unicodecsv
myfile = open('myfile.csv')
data = unicodecsv.reader(myfile, encoding='utf-8', delimiter=';')
for row in data:
print row
您可以使用pip安装它们:
pip install pandas
pip install 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