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 :

Fusionner divers fichiers dans un autre format


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 17
    Par défaut Fusionner divers fichiers dans un autre format
    Bonjour à tous,
    je débute en python (vraiment le tout début), excusez-moi si je n'ai pas le parfait vocabulaire.
    J'ai une centaine de fichier JSON contenant des posts sur internet ainsi que les commentaires associés à ces posts. J'aimerais les découper en deux tables "post.csv" et "comment.csv", et fusionner ensemble les cent fichiers. On m'a aidé pour le script permettant de découper le fichier JSON et d'inclure les données dans les deux tables, mais je ne vois pas comment je peux faire pour ajouter les données issues des autres fichiers JSON :

    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
     
    import json
    import csv
    import sys
     
    json_filename = sys.argv[0] # je ne sais pas à quoi sert cette ligne
     
    # Chargement des données
    with open("fiche1.json", "r") as read_file:
        data = json.load(read_file)
     
    # Extraction du post
    with open('posts.csv', 'w', newline='') as csvfile:
        fields = ['page_id', 'post_time', 'post_text']
        writer = csv.DictWriter(csvfile, fieldnames=fields, extrasaction='ignore')
        writer.writeheader()
        writer.writerow(data)
     
    # Extraction des commentaires
    with open('comments.csv', 'w', newline='') as csvfile:
        fields = ['page_id', 'user_name', 'comment_text']
        writer = csv.DictWriter(csvfile, fieldnames=fields)
        writer.writeheader()
        for comment in data['comment']:
            comment['page_id'] = data['page_id']
            writer.writerow(comment)
    est-ce que l'un.e de vous aurait une idée ? Quelque chose de pas trop compliqué pour quelqu'un qui débute ? Sachant que les fichiers JSON ont des noms assez différents les uns des autres.
    Merci beaucoup d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Ce serait bien d'avoir un exemple de fichier json pour tester...

    Sinon votre code semble effectuer le travail seulement pour le fichier fiche1.json...

    Il faudrait faire pareil pour les autres fichiers mais comme il y en a cent il faudrait utiliser une boucle... On aura besoin de connaitre le nom des fichiers, si les noms de fichier sont tous de la forme ficheN où N est le numéro du fichier, on peut s'en sortir sinon ça doit être possible de lire tous les fichiers d'un dossier sans connaitre leur nom...

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Re-salut,

    J'ai essayé de comprendre votre code pour l’adapter (j'ai essayé de deviner le contenu des fichiers json d’après ce j'ai compris du code)...

    C'est un code de débutant (d'autres l'optimiseront peut-être) mais il fonctionne bien chez moi :

    Code python : 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
    import glob
    import os
    import json
    import csv
     
     
    liste_fiches_json = glob.glob('./fiches_json/*.json')
     
    csvfile_posts = open('posts.csv', 'w', newline='')
    fields = ['page_id', 'post_time', 'post_text']
    writer_posts = csv.DictWriter(csvfile_posts, fieldnames=fields, extrasaction='ignore')
    writer_posts.writeheader()
     
    csvfile_comments = open('comments.csv', 'w', newline='')
    fields = ['page_id', 'user_name', 'comment_text']
    writer_comments = csv.DictWriter(csvfile_comments, fieldnames=fields)
    writer_comments.writeheader()
     
     
    for fiche in liste_fiches_json:
     
        with open(fiche, "r") as read_file:
            data = json.load(read_file)       
     
            writer_posts.writerow(data)
     
            for comment in data['comment']:
                comment['page_id'] = data['page_id']
                writer_comments.writerow(comment)
     
    csvfile_posts.close()
    csvfile_comments.close()

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 17
    Par défaut
    Salut !
    Merci beaucoup de m'aider, je vais essayer votre code. Je ne peux pas mettre un fichier JSON car comme il y a des noms et prénoms je trouve que c'est identifiant, en revanche j'ai "nettoyé" un des fichiers pour l'exemple, ça donne ça (mais en plus volumineux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"page_id": "222778774519444", "post_time": "Yesterday at 14:46", "post_text": "Essai de texte", "comment": [{"user_name": "Prenom1 Nom1", "comment_text": "Commentaire1"}, {"user_name": "Prenom2 Nom2", "comment_text": "Commentaire2"}]}
    Les fichiers ne se nomment pas tous pareil, j'avais mis "Fiche1" pour que ça soit plus compréhensible mais en fait on est plutôt sur des noms comme "postid_164950971831842" qui ne se suivent pas.
    Je regarde votre code et je vous dit, merci en tout cas !

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 17
    Par défaut
    Du coup j'ai essayé le code, la boucle me renvoie ce message d'erreur :

    Traceback (most recent call last):
    File "<pyshell#17>", line 7, in <module>
    writer_comments.writerow(comment)
    File "C:\Program Files\Python37\lib\csv.py", line 155, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
    File "C:\Program Files\Python37\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f609' in position 320: character maps to <undefined>


    Les deux tables en csv sont bien créées, mais comment.csv n'a que la ligne des noms de variables et posts.csv a une ligne d'information. J'ai essayé en modifiant "fiche" par "postid" en me disant qu'il ne trouvait sans doute pas les fichiers, mais ça ne fonctionne pas non plus. Je suis sure que c'est un truc tout bête mais je débute complètement.

    Une idée ?

    merci !

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Ben je viens de tester à nouveau et chez moi cela fonctionne bien...

    Citation Envoyé par Curbice Voir le message
    J'ai essayé en modifiant "fiche" par "postid" en me disant qu'il ne trouvait sans doute pas les fichiers, mais ça ne fonctionne pas non plus.
    Ben non "fiche" représente un élément de liste_fiches_json dans la boucle for fiche in liste_fiches_json:...

    Et dans le code je suppose que les fichiers json sont dans le répertoire fiches_json : liste_fiches_json = glob.glob('./fiches_json/*.json')...

    On peut changer le nom et le chemin du répertoire mais pour tester vous pouvez "créer" un répertoire fiches_json et mettre tous vos fichiers json dedans...

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

Discussions similaires

  1. Convertir un fichier .jar dans un autre format.
    Par Strappal dans le forum Java ME
    Réponses: 2
    Dernier message: 29/06/2006, 19h32
  2. [xslt] import d'1 fichier dans un autre
    Par teophil dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/11/2005, 08h28
  3. Déplacer un fichier dans un autre répertoire
    Par t_om84 dans le forum Général Python
    Réponses: 2
    Dernier message: 16/05/2005, 09h36
  4. Réponses: 2
    Dernier message: 02/07/2004, 13h46
  5. [LG]Ecrire le contenu d'un fichier dans un autre
    Par lucke dans le forum Langage
    Réponses: 10
    Dernier message: 26/04/2003, 20h48

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