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 :

python3 semble ne pas pouvoir comparer les string issus de la ligne de commande avec les string python


Sujet :

Python

  1. #1
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut python3 semble ne pas pouvoir comparer les string issus de la ligne de commande avec les string python
    Bonjour,

    Comme indiqué dans ce sujet (https://www.developpez.net/forums/d1...g/#post8965457) je cherche à appeler des commande depuis python, récupérer les résultat et les traiter.

    Voici mon code

    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
     
    # code de battant
     
    def runcommand (command) :
    	"""
            
            code extrait de :
            
            https://docs.python.org/3.5/library/subprocess.html
    http://stackoverflow.com/questions/2804543/read-subprocess-stdout-line-by-line  """
    	output = ""
    	try :
    		proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
    		outputbyte = proc.stdout.read()
    		output =  outputbyte.decode()
    	except UnicodeEncodeError :	
    		print ("Une erreur et survenue lors de la conversion de byte à string",sys.stderr())
    		traceback.print_exc(file=sys.stderr) # ligne issus de : https://docs.python.org/3.5/library/traceback.html
    	finally :
    		return output
    					output1 = runcommand("cat tab_carractère_spéciaux.csv | cut -f1 | grep \"\.\"")
     
    chaine = self.test = test
     
    for j in chaine
     if j = ""
    					output1 = runcommand(grep \"\.\"")
    else
    					output1 = runcommand ("grep \"{0}\"").format(j)
     
    				if output1 != "" :
    					if output1 == (".") :
    # resultat attendu : le programme devrait passer ici lorsquu'il trouve un point dans la ligne de commande
    						output2 = runcommand("grep \"{0}\" myfile".format("\."))
    					elif output1 != "" :
     
    le programme semble paser ici quand il rencontre un point dans la ligne de command
     
    						output2 = runcommand("grep \"{0}\" myfile".format(output1))
                                                    chaine += output2
     
                                  else
                                        chaine += j

    Question : pourquoi le programme compare mal les chaine issus des résultat de la ligne de commande une sring normal python3

    Est-ce pour cette raison que python ne reconnait pas quand output1 == "." mais reconnais que output1 ü= "" ?

    Merci pour votre aide

    Salutations

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Citation Envoyé par Battant Voir le message
    Question : pourquoi le programme compare mal les chaine issus des résultat de la ligne de commande une sring normal python3

    Est-ce pour cette raison que python ne reconnait pas quand output1 == "." mais reconnais que output1 ü= "" ?
    Si un tel problème existait, vous pourriez poster quelques lignes de code permettant de le reproduire.

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

  3. #3
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut
    Bonjour,

    Le script que je tente de développé à pour rôle de d'examiner la chaine de caractère qu'on lui passe en paramètre. s'il trouve des caractère spéciaux, il doit les remplacer par leur nom en se basant sur un fichier csv Le but est d'envoyer le tout à un moteur de synthèse vocale pour qu'il puisse lire du code source

    Voici le code :

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #! /usr/bin/python3.5
    # -*-coding:UTF-8 -*
     
     
     # ce code contient des parties excraite de la page
     
    # ce script python sera appelé par le script en ligne de
    # commande lire_texte_sécectionné, il prend en paramètre de ligne de commande une chaine de caractère
    # la parcour et recherche dans la table de caractère spéciaux si il existe une correspondance
    # si c'est le cas on remplace le caractère par son nom dans
    # la chaine de sortie
     
    # ce script prend en paramère une chaine de caractère et remplace les caractère spéciaux par leur nom
    # obligation vous ai faite de citer les auteurs
    # pour chaque caractère que contient la variable j
    		# rechercher si ce dernier est dans le fichier tab_caractère.csv
    		# si le caractère est trouvé, alors le remplacer par son nom indiqué dans le ficher et l'envoyer à la systès vocal
    # auteur Battant
    # licence gpl v3 : ce script est sous licence gpl v3 chaque personne qui travaillle sur ce script aura le droit de ce faire payer ou non pour sa partie
    # ce script contient du code extrait de la page : http://stackoverflow.com/questions/8984287/execute-php-code-in-python
    import sys, traceback  # ligne issus de : https://docs.python.org/3.5/library/traceback.html
    import subprocess
    import os
     
    def runcommand (command) :
    	"""
            
            code extrait de :
            
            https://docs.python.org/3.5/library/subprocess.html
    http://stackoverflow.com/questions/2804543/read-subprocess-stdout-line-by-line  """
    	output = ""
    	try :
    		proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
    		outputbyte = proc.stdout.read()
    		output =  outputbyte.decode()
    	except UnicodeEncodeError :	
    		print ("Une erreur et survenue lors de la conversion de byte à string",sys.stderr())
    		traceback.print_exc(file=sys.stderr) # ligne issus de : https://docs.python.org/3.5/library/traceback.html
    	finally :
    		return output
    output1 = ""
    output2 = ""
    if __name__ == "__main__" :
    	if len(sys.argv) < 2:
    		print ("veillez fournir en argument le code source que vous souhauter traiter en le plaçant entre guillement pour qu'il soit compréhensible par un moteur de synthèse vocale")
    	else :
    		i = 1
    		# parcourir la chaine de caractère
    		while i < len(sys.argv) :
    			# parcourir une chaine après l'autre et examiner chaque caractère
    			word = sys.argv[i]
    			outputWord = ""
    			print ("word=",word)
    			for j in word :
    				print ("j = ",j )
    				if (j == '.') :
    					print ("cat point")
    					output1 = runcommand("cat tab_carractère_spéciaux.csv | cut -f1 | grep \"\.\"")
    				else :
    					print ("cat normal")
    					output1 = runcommand ("cat tab_carractère_spéciaux.csv | cut -f1 | grep \"{0}\"").format(j)
    				if output1 != "" :
    					if output1 == (".") :
    						print ("grep point : ".output1)
    						output2 = runcommand("grep \"{0}\" tab_carractère_spéciaux.csv| cut -f2".format("\."))
    					elif output1 != "" :
    						print ("grep normal : ",output1)
    						output2 = runcommand("grep \"{0}\" tab_carractère_spéciaux.csv| cut -f2".format(output1))
    						print ("output 2 : ",output2 )
    					outputWord += output2
    				else :
    					print ("lettre normal : ",output1)
    					outputWord += word[i]
    			print ("outputWord=",outputWord)
    			i += 1
    voici le contenu du fichier csv

    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
     
    cat tab_carractère_spéciaux.csv 
    {	accolade ouverte
    ]	accolade fermée
    (	paranthèse ouverte
    )	parenthèse fermée
    [	crochet ouvert
    ]	crochet fermé
    ,	virgule
    .	point
    :	deux point
    ;	point virgule
    &	and
    @	at
    +	plus
    ½	pourcent
    /	slash
    ?	point d'intérogation
    '	apostrophe
    "	guillement
    $	dollar
    |	pipe
    =	égale
    *	asterisque
    -	tiret	
    _	underscore
    Pour ceux qui travaille sur windows, il faut installer les commande unix


    Je laisse une copie du fichier csv ci-joint

    Bon test

    Salutations
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Votre code remplace des caractères spéciaux ASCII par des chaînes de caractères non ASCII.
    Avec Python, vous pourriez mettre ces correspondances dans un dictionnaire et effectuer ce remplacement dans une simple boucle.
    Ce qui éviterait d'avoir à appeler subprocess pour lui faire exécuter des commandes Linux qui auront le mauvais goût de coder leur sortie en fonction de la locale ou de l'environnement système.

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

  5. #5
    Membre très actif
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Par défaut Mettre les fichier csb dans un dictionnaire
    Bonjour,

    Il faudrait que je mette le contenu de mon fichier csv dans un dictionnaire.

    y'a-t-il d'autre moyen pour ce faire qu'en passant par unpickle, read et splite comme par exemple avecv un module pour traiter les fichiers csv ?

    Merci pour votre aide

    Salutations

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par Battant Voir le message
    Il faudrait que je mette le contenu de mon fichier csv dans un dictionnaire.
    Dans un premier temps, vous pourriez créer ce dictionnaire directement dans le script.

    Citation Envoyé par Battant Voir le message
    y'a-t-il d'autre moyen pour ce faire qu'en passant par unpickle, read et splite comme par exemple avec un module pour traiter les fichiers csv ?
    Le module csv peut aider.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/11/2007, 22h05
  2. Réponses: 1
    Dernier message: 11/12/2006, 18h33
  3. Réponses: 1
    Dernier message: 14/05/2006, 12h57
  4. demonter les périphérique USB par la ligne de commande.
    Par Essilife dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 20/01/2006, 11h50
  5. Réponses: 7
    Dernier message: 13/03/2005, 16h45

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