J'ai un dossier avec beaucoup d'entrées sur les prix Nobel. Je convertis ce fichier en une liste comme celle-ci:

file = open(path, 'r')
file.readline()
content = []
for line in file:
    line = line.replace('\n', '')
    content.append(line.split(';'))

content = check(content, 'röntgen')

Après cela, j'ai une fonction qui prend cette liste et un autre argument et vérifie si la liste contient cet argument. Cependant, si l'argument prend un caractère spécial comme Ö cela ne fonctionne pas car lorsque le fichier est lu, python l'enregistre comme: ö

def check(content, attr):
reducedList = []
for i in range(len(content)):
    curr = content[i][4]
    if curr.find(attr) != -1:
        reducedList.append(content[i])
return reducedList

Avec:

curr = 'voor hun verdiensten op het gebied van de analyse van de kristalstructuur door middel van röntgenstraling'
attr = 'röntgen'

J'ai essayé de le convertir avec utf-8 mais cela ne semble pas aider. Quelqu'un a-t-il une solution?

1
job vink 16 janv. 2017 à 18:12

2 réponses

Meilleure réponse

La solution est de remplacer open(path,’r’,) par open(path,’r’,encodeing=’utf-8’) Si vous ajoutez le paramètre de codage, python s'assurera que le fichier est lu dans utf-8, donc lorsque vous comparez les chaînes, elles sont vraiment les mêmes.

0
job vink 16 janv. 2017 à 20:42

Cela se produit parce que vous utilisez Python 2, probablement sous Windows, et que votre fichier est encodé en utf-8 et non en latin-1.

Le mieux que vous fassiez, au lieu d'essayer de résoudre le problème au hasard (y compris avec les premiers commentaires à votre question: ce sont toutes des suggestions aléatoires), est de comprendre ce qui se passe. Alors, arrêtez ce que vous essayez de faire.

Lis ça: https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about -unicode-et-jeux-de-caractères-sans-excuses /

Ensuite, passez à Python3 si vous le pouvez - cela devrait gérer la plupart des problèmes automatiquement.

Si vous ne pouvez pas, vous devez gérer correctement le décodage et le réencodage du texte manuellement - les concepts sont sur le lien ci-dessus. Supposons que vos fichiers d'entrée soient au format utf-8

1
jsbueno 16 janv. 2017 à 15:25