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 :

Ecrire dans un fichier avec un certains format


Sujet :

Python

  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Ecrire dans un fichier avec un certains format
    Bonjour à tous,

    Voila je récupère dans une liste un ensemble de données que je souhaite ré-écrire dans un fichier texte.

    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
    a=['44', '40474', '40473', '40458', '40497', '40496', '40481', '45', '7587', '40474', '40458', '7586', '7602', '40497', '40481', '7601', '46', '7537', '40474', '7587', '435', '7542']
    file=open("_Temp","w")
    Nbr_Col=9
    Nbr_ligne=int(len(a)/Nbr_Col)
     
    for i in range(1, Nbr_ligne,1):
        print (i)
        file.write("\n")
        for j in range(0,Nbr_Col,1):
            print(j)
            chaine=" "+str(a[j])+","
            print(chaine)
            file.write(chaine)
    ce que je souhaite faire c'est d'écrire cette liste sous cette forme dans mon fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    44, 40474, 40473, 40458, 40497, 40496, 40481, 45
    7587, 40474, 40458, 7586, 7602, 40497, 40481, 7601
    46, 7537, 40474, 7587, 435, 7542
    je dois avoir 9 champs (ou 9 colonnes) par ligne, et chaque valeurs doit être séparée par une virgule.

    je calcul le nombre de ligne en prenant la longueur de ma chaine que je divise par le nombre de colonne, ce qui me permet boucler sur le nombre de ligne dans un premier temps. Je prend la partie entière dans cet exemple pour ne pas compliquer le code pour le moment, mais je compte ajouter une condition pour vérifier que le reste de la division est nul ou pas pour savoir si je dois boucler une ligne supplémentaire (mais pas le soucis pour le moment)

    Ensuite je boucle sur le nombre de colonne pour écrire chaque valeur de ma liste.

    Mon problème je le comprend, mais je ne sais pas comment le résoudre. en fait avec ce code je vais toujours ré-écrire la même ligne, mais bon pour le moment il ne ré-écrit qu'une seule ligne.

    Une idée ?

    Merci d'avance pour votre aide.

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

    Pas mal pour du C, dommage pour du Python.
    Fabriquons une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> L = list(range(10))
    >>> L
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    Pour la découper en bouts de 3 on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> n = 0
    >>> L[n * s: (n+1)*s]
    [0, 1, 2]
    >>> n = 1
    >>> L[n * s: (n+1)*s]
    [3, 4, 5]
    >>> n = 2
    >>> L[n * s: (n+1)*s]
    [6, 7, 8]
    Avec Python, une façon élégante est d'emballer cette découpe dans un générateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> def chunk(z, n):
    ...     for i in range(0, len(z), n):
    ...         yield z[i:i+n]
    ...
    Puis on le fait tourner comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> for e in chunk(L, 3):
    ...     print(e)
    ...
    [0, 1, 2]
    [3, 4, 5]
    [6, 7, 8]
    [9]
    Mais bon si vous préférez programmer en C...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Pas mal pour du C, dommage pour du Python.
    Fabriquons une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> L = list(range(10))
    >>> L
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    Pour la découper en bouts de 3 on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> n = 0
    >>> L[n * s: (n+1)*s]
    [0, 1, 2]
    >>> n = 1
    >>> L[n * s: (n+1)*s]
    [3, 4, 5]
    >>> n = 2
    >>> L[n * s: (n+1)*s]
    [6, 7, 8]
    Avec Python, une façon élégante est d'emballer cette découpe dans un générateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> def chunk(z, n):
    ...     for i in range(0, len(z), n):
    ...         yield z[i:i+n]
    ...
    Puis on le fait tourner comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> for e in chunk(L, 3):
    ...     print(e)
    ...
    [0, 1, 2]
    [3, 4, 5]
    [6, 7, 8]
    [9]
    Mais bon si vous préférez programmer en C...
    - W
    Je reviens sur mon problème aprés une petite pause.

    Merci ça fonctionne plutot bien, mais au final je n'obtient pas vraiment le format souhaité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    44, 40474, 40473, 40458, 40497, 40496, 40481, 45
    7587, 40474, 40458, 7586, 7602, 40497, 40481, 7601
    46, 7537, 40474, 7587, 435, 7542
    Comment puis je faire pour avoir ce format écrit dans mon fichier de sortie ?

    Merci d'avance

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

    Citation Envoyé par nekcorp Voir le message
    Merci ça fonctionne plutot bien, mais au final je n'obtient pas vraiment le format souhaité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    44, 40474, 40473, 40458, 40497, 40496, 40481, 45
    7587, 40474, 40458, 7586, 7602, 40497, 40481, 7601
    46, 7537, 40474, 7587, 435, 7542
    Si le nombre d'éléments n'est pas divisible par... la dernière ligne affiche le reste.


    Comment puis je faire pour avoir ce format écrit dans mon fichier de sortie ?
    Si pour passer de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> L[n * s: (n+1)*s]
    [6, 7, 8]
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> ','.join(L[n * s: (n+1)*s])
    [6, 7, 8]
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> write(','.join(L[n * s: (n+1)*s]))
    et encore trop compliqué, c'est que vous gagneriez à relire vos tutos.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Si le nombre d'éléments n'est pas divisible par... la dernière ligne affiche le reste.



    Si pour passer de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> L[n * s: (n+1)*s]
    [6, 7, 8]
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> ','.join(L[n * s: (n+1)*s])
    [6, 7, 8]
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> write(','.join(L[n * s: (n+1)*s]))
    et encore trop compliqué, c'est que vous gagneriez à relire vos tutos.
    - W
    Pour la fonction "write" je n'ai pas de soucis (je me suis mal exprimé). en fait je voulais dire que dans le format précédent, cela ne correspondait pas à ce que je voulais avoir dans mon fichier de sortie.

    Je souhaite tout simplement que les crochet n'apparaissent pas. Je vais tenter avec un .replace pour voir.

    Par contre dans ce code à quoi correspondent n et s ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> ','.join(L[n * s: (n+1)*s])
    [6, 7, 8]
    Encore merci

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 697
    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 697
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    Par contre dans ce code à quoi correspondent n et s ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> ','.join(L[n * s: (n+1)*s])
    [6, 7, 8]
    Le cut&paste d'un exemple précédent qui ne fonctionne pas car je pense trop csv.writer.
    Mais de toutes façons, décomposez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> L = [1,2,3]   # une liste d'entier
    >>> L                  # équivaut a appliquer str/repr à L
    [1, 2, 3]
    >>> ','.join(L)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: sequence item 0: expected str instance, int found
    >>> ','.join([str(_) for _ in L]) # transformée en chaine de caractères séparés par des ","
    '1,2,3'
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/04/2008, 09h07
  2. Réponses: 6
    Dernier message: 12/12/2006, 13h30
  3. Écrire dans un fichier avec shell
    Par dams78 dans le forum Linux
    Réponses: 5
    Dernier message: 07/12/2006, 17h56
  4. Réponses: 6
    Dernier message: 17/12/2005, 19h27
  5. Ecrire dans un fichier avec PL/SQL (oracle)
    Par Titouf dans le forum PL/SQL
    Réponses: 3
    Dernier message: 02/10/2005, 06h36

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