Bienvenue sur IndexError.

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

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

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,066 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,094 points)
...