Bonjour,

Je travaille sur une machine XP SP3, et avec une version Python 3.2.2.
sys.stdout.encoding vaut cp850.

En résumé, je teste une application qui génère des fichiers de trace volumineux. Et l'encodage du fichier n'est pas indiqué. Et mon idée est de créer un script python qui analyse ces fichiers de trace pour extraire les informations pertinentes (pour l'instant je regarde la présence du mot-clef ODD).

Mon souci est que lorsque je lis ces fichiers de trace ligne par ligne, certaines lignes ne sont pas lues car elle contiennent un "hiéroglyphe" dont la valeur est 0x81. Cf. extrait des traces à analyser :

"OUV/PION 2H30\x00R\x00ŒÊ\x00ðÅ\x00\x14\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

Il s'agit d'un string de 20 caractères. Ce string n'a a priori pas été initalisé avec des caractères null. Les carrés blancs correspondent à la valeur 0x81.

Et voici le bout de code qui tente de lire le fichier de trace:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
idx_line = 0
f = open(nom_complet, "r", encoding=sys.stdout.encoding)
  while f :
    read_data = f.readline()
    idx_line += 1
    if not read_data :
      break
    if read_data.find("|ODD") >= 0 :
      my_logger.debug("ODD message found at line %d : %s" % (idx_line, str(read_data)))
    else :
      my_logger.warning("No ODD message found")
 
f.close()
D'après ce bout de code, je devrais lire toutes les lignes. Or, je ne lis pas celles qui ont le caractère 0x81. Et j'ai cherché sur le net mais là je suis bloqué.

Ou alors une idée serait de lire le fichier de trace une première fois pour remplacer les caractères 0x81 par des caractères null 0x00. Et ensuite de faire mon traitement, comme indiqué dans le code.

Toutes les idées sont les bienvenues. Merci d'avance