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 :

Selectionner une colonne et la copier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut Selectionner une colonne et la copier
    Hello

    je débute en python, pour le moment le Batch me suffisait pour retraiter automatiquement mes fichiers txt.
    Mais voila après de multiples recherches sur internet je calle pour copier une collone d'un fichier texte délimité par des espaces et le coller dans un nouveau fichier texte.
    Quelqu'un peut il me donner un coup de pouce ?


    Merci d'avance !

  2. #2
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    je suppose que ton fichier d’entrée est du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    aaa bbbb    ccccc
    ddd  ee f
    a third line
    Tu dois « éclater » chaque ligne en un tableau, puis en récupérer l’élément qui t’intéresse. Par exemple:

    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
     
    # Ouvrir le fichier source et y récupérer la colonne voulue
    result = []
    file = open("chemin/vers/fichier.txt", "r")
    for line in file:
        # Ajoute à result le deuxième élément de chaque ligne
        # string.split() sans argument découpe la string selon les espaces :D
        result.append(line.split()[1])
     
    file.close()
     
    # Reste à écrire tout ça dans le fichier de sortie…
    file = open("chemin/vers/fichier/a/ecrire.txt", "w")
    # Ici, on écrit tout d’un coup, en rassemblant tous les éléments de résult dans
    # une seule string, séparés par un retour à la ligne ("\n")
    file.write("\n".join(result))
    file.close()

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    test.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    col1 100 12
    col2 101 13
    col3 102 14
    Code Python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with open('outtest.txt', 'w') as outfile:
        with open('test.txt', 'r') as infile:
            for l in infile.readlines():
                outfile.write(l.split( )[0] + '\n')
    Fichier en sortie (outttest.txt)
    @+

    Edit : Tu sélectionne la colonne ici l.split( )[0]

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Et un petit bonus Python 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open('outtest.txt', 'w') as outfile, open('test.txt', 'r') as infile:
        for l in infile.readlines():
            outfile.write(l.split( )[0] + '\n')
    @++

  5. #5
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Plus court et plus élégant, PauseKawa – faut vraiment que je me mette à utiliser with

  6. #6
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    424
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 424
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Et un petit bonus Python 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open('outtest.txt', 'w') as outfile, open('test.txt', 'r') as infile:
        for l in infile.readlines():
            outfile.write(l.split( )[0] + '\n')
    @++
    Pourquoi le readlines() ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open('outtest.txt', 'w') as outfile, open('test.txt', 'r') as infile:
        for l in infile:
            outfile.write(l.split( )[0] + '\n')
    Fonctionne aussi... Et ça évite le chargement du fichier complet en mémoire. Y a-t-il un avantage à mettre le readlines() ?

    Sinon, pour le fun, la version oneliner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open('outtest.txt', 'w').write("\n".join([l.split( )[0] for l in open('test.txt', 'r')]))

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Citation Envoyé par fatbob Voir le message
    Y a-t-il un avantage à mettre le readlines()
    Ben... En fait non je pense.
    readlines() fonctionne sur le principe l.read().split('\n') alors que for l in infile c'est plutôt iter(l). A confirmer.
    Utiliser readlines() est avoir du deprecated par la suite (vu les évolutions) ?
    for l in infile me semble direct alors que readlines() fais un appel externe (certes à un Builtin) : A tester avec time sur un gros fichier.

    Ceci dit pour ce qui est des oneliner et des pythoneries cela me rappelle un sujet. : Retour aux sources > lisible et 'simple'

    @+

  8. #8
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par fatbob Voir le message
    Y a-t-il un avantage à mettre le readlines() ?
    Ben... En fait non, définitivement.

    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
    def test1():
        with open('outtest1.txt', 'w') as outfile:
            with open('test.txt', 'r') as infile:
                for l in infile.readlines():
                    outfile.write(l.split( )[0] + '\n')
     
    def test2():
        with open('outtest2.txt', 'w') as outfile:
            with open('test.txt', 'r') as infile:
                for l in infile:
                    outfile.write(l.split( )[0] + '\n')
     
    def test3():
        with open('outtest3.txt', 'w') as outfile:
            with open('test.txt', 'r') as infile:
                for l in iter(infile):
                    outfile.write(l.split( )[0] + '\n')
     
    def test4():
        open('outtest4.txt', 'w').write("\n".join([l.split( )[0] for l in
            open('test.txt', 'r')]))
     
    import time
     
    def testfunc(func, t):
        print('test de ' + func.__name__ + ':')
        r = []
        for t in range(t):
            t1 = time.clock()
            func()
            t2 = time.clock()
            r.append(t2-t1)
        return sum(r)/len(r)
     
    print('readlines() ' + str(testfunc(test1, 10)))
    print('for l in infile ' + str(testfunc(test2, 10)))
    print('iter(infile) ' + str(testfunc(test3, 10)))
    print('oneshoot ;) ' + str(testfunc(test4, 10)))
    test de test1:
    readlines() 21.292999999999999
    test de test2:
    for l in infile 20.298000000000002
    test de test3:
    iter(infile)' 20.195
    test de test4:
    oneshoot 13.761000000000001
    Il en ressort de mes tests que les résultats de readlines sont complètements aléatoires et globalement plus lents.
    La version oneliner est toujours la plus rapide.

    Donc
    Citation Envoyé par PauseKawa Voir le message
    Ceci dit pour ce qui est des oneliner et des pythoneries cela me rappelle un sujet. : Retour aux sources > lisible et 'simple'
    Disons que je n'ai rien dit.

    @+

Discussions similaires

  1. Réponses: 14
    Dernier message: 29/07/2008, 12h33
  2. Selectionner une colonne dépondant de sa valeur
    Par agur29 dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 04/10/2007, 11h02
  3. Selectionner une colonne avec des cellules fusionnées
    Par Pietro_L dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/09/2007, 07h47
  4. Réponses: 5
    Dernier message: 07/09/2007, 17h23
  5. pb pour selectionner une colonne
    Par 123quatre dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/06/2007, 11h54

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