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 :

Envoi d'une liste sélectionnée (SQLite3) vers un fichier texte [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut Envoi d'une liste sélectionnée (SQLite3) vers un fichier texte
    Bonjour,

    Je suis confronté à une incompréhension, dû je pense à mes lacunes d'amateur pythonien.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            self.select = self.cursor.execute("SELECT due_date, shelf, description, part_number, serial_number, quantity, "
                                              "remarks FROM parts_inventory WHERE due_date <? AND due_date IS NOT null",
                                              self.expired_filter)
     
            for row in self.select:
                file = open("data/expired_list_" + str(self.d_day) + ".txt", "w+")
                print(row)
                file.write(str(row))
                file.close()
    le "print(row)" affiche bien toutes les lignes dans la console mais le fichier txt affiche uniquement la dernière.

    Pourquoi ? comment puis-je enregistrer dans le fichier txt la totalité des données ?

    Merci d'avance pour votre aide

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

    Citation Envoyé par Fred973 Voir le message
    Pourquoi ? comment puis-je enregistrer dans le fichier txt la totalité des données ?
    Déjà si vous ouvrez le fichier a chaque itération, çà craint...

    Puis comme vous n'avez pas inventé 'w+', vous auriez pu prendre le temps de tester.

    C'est pas compliqué de lancer l'interpréteur Python et d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> f = open('test.dat', 'w+')
    >>> print('toto', file=f)
    >>> f.close()
    de recommencer la même séquence d'instructions et de regarder ce que contient le fichier...

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

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    Bon je te remercie de m'avoir trituré les méninges !!

    j'ai donc remplacé w+ par a+ et je comprends donc que w+ réécrivais chaque lignes par dessus celle d'avant, c'est ça ?

    Parce que maintenant ça fonctionne

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par Fred973 Voir le message
    j'ai donc remplacé w+ par a+ et je comprends donc que w+ réécrivais chaque lignes par dessus celle d'avant, c'est ça ?
    Ouvrez la documentation, testez les opérations élémentaires avant de les utiliser, simplifiez votre code (pourquoi ouvrir le fichier à chaque itération?).

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

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    simplifiez votre code (pourquoi ouvrir le fichier à chaque itération?
    A ce stade de mon programme je fais juste des tests ce fichier est supprimer juste après. J'aimerai surtout mettre ces infos dans un fichier pdf avec un tableau et une belle présentation.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par Fred973 Voir le message
    J'aimerai surtout mettre ces infos dans un fichier pdf avec un tableau et une belle présentation.
    On fait de jolies choses avec reportlab.

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

  7. #7
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    oui suis déjà en train de lire la doc c'est énorme....... j'ai du boulot

  8. #8
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    On fait de jolies choses avec reportlab.

    - W
    J'a réussi à transférer les données sqlite dans un fichier csv mais j'ai des parenthèses qui se mettent au debut et la fin de chaque ligne. Comment puis-je les enlever stp ?

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

    Citation Envoyé par Fred973 Voir le message
    Comment puis-je les enlever stp ?
    En transformant chaque row "tuple" en chaine de caractères avec str.join.

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

  10. #10
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    ce ne serait pas mieux avec replace ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str.replace("(", "") # pour les parenthèses du début
    str.replace(")", "") # pour les parenthèses de la fin
    le souci c'est que je ne sais pas du tout comment l'intégrer dans mon code

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par Fred973 Voir le message
    le souci c'est que je ne sais pas du tout comment l'intégrer dans mon code
    Si déjà vous ne savez pas ce qu'est un "tuple"... le mieux est de chercher un peu sur Internet ou dans la documentation Python (c'est le type d'objet que vous retourne for row in self.select).

    C'est quand même un type de base qui a de fortes ressemblances avec les listes.
    Il mérite d'être connu.

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

  12. #12
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    Voila deux jours que je me triture le cerveau et j'ai vraiment du mal.

    Bon, j'ai regardé correctement la definition d'un tuple , donc si j'ai bien compris la variable select_parts dans le code dessous à pour égalité un tuple du fait des "( )". Ce tuple est donc imuable par definition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import sqlite3
    from datetime import date
    d_day = date.today()
    conn = sqlite3.connect('data/database.db')
    cursor = conn.cursor()
    select_parts = cursor.execute("SELECT shelf, description, part_number, serial_number, quantity, due_date, "
                                  "batch_number, form_number FROM parts_inventory")
    Si je veux pouvoir le modifier, je dois le transformer en une liste ... comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = ";".join([str(i) for i in select_parts])
    il me sépare donc mes "lignes" ou row avec ; ce qui fonctionne j'ai juste jusqu'ici ?

    donc en mettant tou ensemble avec un print :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import sqlite3
    from datetime import date
    d_day = date.today()
    conn = sqlite3.connect('data/database.db')
    cursor = conn.cursor()
    select_parts = cursor.execute("SELECT shelf, description, part_number, serial_number, quantity, due_date, "
                                  "batch_number, form_number FROM parts_inventory")
     
    s = ";".join([str(i) for i in select_parts])
    print(s)
    et voila ce que me donne la console :
    ('A01', 'Gasket', '26-23096-001', '', '3', None, '', '');('A01', 'Seal', '26-23096-003', '', '2', None, '', 'VV.09-8242')

    Process finished with exit code 0
    désolé si j'ai l'air de rien comprendre mais je suis vraiment débutant et j'apprends sur le tas, donc merci encore pour ton aide et ta compréhension

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

    Quand vous écrivez ";".join([str(i) for i in select_parts])

    A chaque itération, le i est un ligne/tuple, vous avez donc un truc à 2 dimensions.
    Au départ vous étiez parti de for row in select_parts qui bouffe les lignes, après il faut appliquer le .join aux colonnes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for row in select_parts:
         print (', '.join(str(z) for z in row))
    Pourquoi croyez vous que dans les tutos on passe tant de temps sur les tableaux et les doubles boucles imbriquées? Elles sont partout!

    En plus l'ordinateur, faire des boucles, il en redemande...

    Il faut se muscler le cerveau avant de se lancer à coder même des trucs aussi simples, sinon, c'est mal de tête assuré. Prenez le temps d'apprendre... C'est un bon investissement et vos neurones vous en seront reconnaissants.

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

  14. #14
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    réponse rapide et tout est nickel maintenant je vais reposer mes neurones et reprendre cela demain depuis le début pour bien comprendre. Par contre qu'entends tu pas "bouffe des lignes" ?

    Merci infiniment Wiztricks.

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

Discussions similaires

  1. [Débutant] exportation des donnees d'une base donnee access vers un fichier texte
    Par bolbolhari dans le forum VB.NET
    Réponses: 0
    Dernier message: 15/04/2013, 14h50
  2. Réponses: 5
    Dernier message: 29/06/2009, 12h57
  3. exporter une plage de cellules vers un fichier texte
    Par VINCENTNINI dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/10/2007, 09h12
  4. Réponses: 2
    Dernier message: 25/06/2006, 21h06
  5. [vb.net] transfert d'une table SQL-Servr vers un fichier texte
    Par nkonito dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/05/2006, 05h36

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