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 :

python et sed


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut python et sed
    Bonjour,

    Je voudrais savoir si il est possible d'avoir l'équivalent de:
    en Python ?

    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par zoscoy Voir le message
    Je voudrais savoir si il est possible d'avoir l'équivalent de:
    en Python ?
    Oui mais, il va falloir écrire nombre de lignes de code ne serait-ce que pour récupérer le nom des fichiers d'entrée et de sortie, les ouvrir, lire ligne à ligne, tester si elle est vide ou pas, l'écrire,...
    C'est ce qui fait la différence entre un langage de programmation plutôt généraliste (comme Python) et un outil très spécialisé comme sed.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    D'accord, je me suis penché dessus ces derniers jours, sans résultat.

    merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par zoscoy Voir le message
    D'accord, je me suis penché dessus ces derniers jours, sans résultat.
    Si vous ne montrez pas le code que vous avez essayé, pas facile de savoir ce que vous n'avez pas compris (et essayer de vous aider à....).

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    j'ai essayé plusieurs choses mais l'idée principale du script est là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    # -*- coding:utf-8 -*-
    import sys, re
    del sys.argv[0]; i = 0
    while i < len(sys.argv):
        entrer = open(sys.argv[i], "r"); lignes = entrer.read(); entrer.close()
        for j in lignes:
            if re.search("^$", j):
                del j
        sortir = open(sys.argv[i], "w"); sortir.write(lignes); sortir.close();
        i += 1

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Vous essayez de faire bien trop de choses à la fois!
    Travaillez sur un seul fichier, puis vous fabriquez une fonction qui pourra être (éventuellement) appliquée à une liste de (nom de) fichiers.
    Quand vous écrivez: "lignes = entrer.read()", vous récupérez tout le contenu et non une liste de chaînes de caractères.
    problème: une chaine de caractère est itérable comme une liste. mais "for j in ..." ne va pas mettre dans "j" ce que vous attendez (une ligne) mais un caractère.
    Pas besoin de re: si la ligne est vide sa longueur sera nulle (ou égale à 1 si vous y avez inclus les fins de lignes).

    La première chose à faire est de créer un ficher test.txt contenant des lignes vides.
    puis vous lancer la console Python, et vous regardez comment parcourir votre fichier ligne à ligne
    avec les fins de lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> f = open('test.txt')
    >>> for line in f: print(line)
    sans les fins de lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> lines = open('test.txt').read().splitlines()
    >>> for line in lines: print(line)
    puis vous sautez les lignes vides, puis vous écrivez dans le fichier de sortie...

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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    j'ai trouvé une solution plus simple qui ne nécessite pas de programmer.

    il suffit d'utiliser vim et de faire:

    q # commencer l'enregistrement d'une macro
    a # registre de la macro
    /^$ # recherche ligne vide
    dd #suppression de ligne
    q # finir l'enregistrement de la macro
    1000@a #1000 répétitions de la macro

    comme j'utilise vim tous les jours, je me dis que ça serait plus simple .

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par zoscoy Voir le message
    j'ai trouvé une solution plus simple qui ne nécessite pas de programmer.
    Vous aviez déjà "sed"...

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

  9. #9
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par zoscoy Voir le message
    j'ai trouvé une solution plus simple qui ne nécessite pas de programmer.
    à se demander ce que tu fabriques sur un forum de programmeurs en fait

    d'accord avec Wiztricks, la solution avec sed est bien plus efficace, déjà tu n'es pas obligé de créer un script sed, tu peux en une seule ligne faire un truc du genre
    ensuite pour ce qui est de vim ta solution n'est pas très fiable, que se passe-t-il si tu as plus de 1000 substitutions à effectuer ?
    c'est plus simple et plus efficace de faire
    quant à la Python (puisqu'on est sur le forum concerné quand même), une possibilité parmi d'autres est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> with open('bla', 'r') as f, open('bla2', 'w') as f2:
    ...   f2.write(''.join([ligne for ligne in f.readlines() if ligne != '\n']))
    programmer c'est bien

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    merci beaucoup

    Il faut dire aussi que je ne savais plus trop comment faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/06/2014, 12h03
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  5. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26

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