IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Convertir un fichier en ANSI


Sujet :

Python

  1. #1
    Membre très actif
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 162
    Par défaut Convertir un fichier en ANSI
    Bonjour,

    Dans le cadre d'une application métier dont les scripts sont basés sur du Jython, je cherche à forcer l'encodage des fichiers importés en ANSI.

    Les fichiers soumis par les utilisateurs, par exemple au format UTF-8, ne passent pas... Lorsqu'avec Notepad++ je force l'encodage du fichier en ANSI (encodage / convertir en ANSI) alors le même fichier est importé et traité correctement par le script Jython.

    J'ai effectué pas mal de recherches ("python file encoding", "how to encode to ansi" etc...) cependant la solution simple ne semble pas exister. J'ai tenté avec les fonctions encode et decode sans succès. A priori il s'agirait de connaître l'encodage en entrée mais la tâche me semble difficile.

    Je suis preneur de toute aide, conseil ou lien! Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    import shutil
     
    def is_int_long_float_complex(string):
    	try:
    		int(string)
    		return True
    	except ValueError: pass
    	try:
    		float(string)
    		return True
    	except ValueError: pass
    	try:
    		complex(string)
    		return True
    	except ValueError: pass
    	try:
    		long(string)
    		return True
    	except ValueError: pass
    	return False
     
    locname = fdmContext["LOCNAME"]
     
    if locname[:3] == "IG_" or locname[:6] == "GL_FRA":
     
    	infilename = fdmContext["APPROOTDIR"] + "/" + fdmContext["FILEDIR"] + "/" + fdmContext["FILENAME"]
    	outfilename = fdmContext["APPROOTDIR"] + "/" + fdmContext["FILEDIR"] + "/" + fdmContext["FILENAME"] + ".modif"
    	copyfilename = fdmContext["APPROOTDIR"] + "/" + fdmContext["FILEDIR"] + "/" + fdmContext["FILENAME"] + ".bak"
     
    	shutil.copyfile(infilename, copyfilename)
    	infile = open(copyfilename, "r")
    	outfile = open(outfilename, "w")
     
    	for line in infile:
     
    		line = line.strip()
     
    		if locname[:6] == "IG_FRA":
     
    			column = line.split(';',9)
    			outfile.write(column[0] + ";"  + "IG" + column[1] + ";"  + column[2] + ";"  + column[3] + ";None;" + column[5] + ";" + column[6] + ";" + column[7] + "\n")
     
    			if column[5] != '':
    				outfile.write(column[0] + ";"  + "IG" + column[1] + ";"  + column[2] + ";"  + column[3] + ";"  + column[4] + ";"  + column[5] + ";" + column[6] + ";" + column[8] + "\n")
     
    		elif locname[:3] == "IG_":
     
    			column = line.split(";",9)
     
    			if is_int_long_float_complex(line[7]) and is_int_long_float_complex(line[8]):
    				outfile.write(column[0] + ";" + column[1] + ";" + column[2] + ";" + column[3] + ";None;" + column[5] + ";" + column[6] + ";" + column[7] + "\n")
     
    				if column[8] != column[7]:
    					outfile.write(column[0] + ";" + column[1] + ";" + column[2] + ";" + column[3] + ";" + column[4] + ";" + column[5] + ";" + column[6] + ";" + column[8] + "\n")
     
    		else:
    			column = line.split(";",7)
    			outfile.write(column[0] + ";" + "GL" + column[1] + ";"  + column[2] + ";" + column[3] + ";" + column[4] + ";" + column[5] + ";" +column[6] + "\n")
     
    	infile.close()
    	outfile.close()
    	shutil.copyfile(outfilename, infilename)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 704
    Par défaut
    Salut,

    Comme votre code "trie" des colonnes suivant le type nombre ou pas des deux dernières colonnes, que les nombres sont (très souvent) représentés en ASCII, et que ce qui est ASCII se représente de la même façon en utf-8 et dans les divers encodages ISO 8859-*, le plus simple serait de travailler en binaire, i.e. sans convertir quoi que ce soit.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [UNIX]Convertir un fichier xml UTF-8 en ANSI
    Par splouf dans le forum Unix
    Réponses: 2
    Dernier message: 08/04/2010, 09h32
  2. [PHP 5.2] Convertir un fichier de UTF-8 à ANSI
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2009, 11h04
  3. convertir un fichier texte en ANSI
    Par sculpteur dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 08/10/2007, 11h38
  4. Convertir un fichier texte de OEM vers ANSI
    Par paix02200 dans le forum VBA Access
    Réponses: 1
    Dernier message: 20/08/2007, 15h15
  5. Convertir un fichier unicode en ansi?
    Par Faiche dans le forum C++
    Réponses: 7
    Dernier message: 06/10/2006, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo