Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

\ufeff au début d’un fichier

+3 votes

Pour un de mes programmes, je permets à l'utilisateur d'enregistrer et de charger les données entrées. Je ne me casse pas la tête et j'utilise du texte brut non formaté :

98067A C:\Users\Tartempion\Documents\tleextract\test.csv C:\Users\Tartempion\Documents\tleextract\2014_001.txt C:\Users\Tartempion\Documents\tleextract\2014_002.txt

(C’est des chemins Windows mais je suis sous Linux. De toute façon le problème est le même partout.)

Dans Python, je charge les données lignes par ligne :

def load(filename): # Résumé de la vraie fonction.
    with open(filename, "r") as file:
        lines = files.readlines()
        lines = [line.strip() for line in lines]
        return {"cospar": lines[0], "output": lines[1], "input": lines[2:]}

puis je mets le tout dans un dictionnaire.

À l’affichage dans l’interface graphique tout va bien mais ça ne fonctionne pas. La cause, c’est qu’un caractère invisible (\ufeff) s’est glissé au tout début du fichier. Du coup, le « 98067A » devient \ufeff98067A. D’après ce que j’ai lu, c’est un problème lié aux fichiers en UTF-8. C’est étonnant car je les manipule habituellement sans problèmes.

La question, c’est : comment récuperer seulement la partie qui m'intéresse et supprimer \ufeff ? str.strip() le laisse en place.

demandé 23-Sep-2015 par TD

2 Réponses

+10 votes

Lorsque tu travailles en utf8, il vaut mieux le signaler à python à l'ouverture du fichier. Ici, c'est visiblement le BOM qui pose problème, parce qu'il est lu comme un caractère "normal".

En python3, ça donne ceci :

with open(filename, "r", encoding='utf8') as file:
répondu 23-Sep-2015 par yoch (2,514 points)
0 votes

Pourquoi ne pas utiliser codecs pour régler ton pb ?

Des exemples concrets ici

répondu 25-Sep-2015 par boblinux (3,092 points)
...