Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comparer deux txt ligne par ligne

    28 décembre 2021 à 14:22:37

    Bonjour à tous voici mon problème j'ai un fichier qui renferme des dictionnaire comme ça

    {"title": "Titre du produit", "price": "Le prix", "url": "url", "image": "url.jpg", "date": "2021-12-28 13:08:13"}
    

    il y'en a 1 par ligne et je cherche à les comparer à un autre fichier qui lui contient les nouveaux dictionnaire pour qu'il me renvoie ceux qui viennent d'arriver

    Voici mon code toute aide est la bien venue :)

    request = {
        'keywords': 'pokemon',
        'paginationInput': {
            'entriesPerPage': 50,
            'pageNumber': 1
        },
        'sortOrder': 'StartTimeNewest'
    }
    response = api.execute('findItemsAdvanced', request)
    file = open("last.json", "w", encoding="utf-8")
    
    for item in response.reply.searchResult.item:
        date = item.listingInfo.startTime
        date = str(date).replace("datetime.datetime(", "")
        price = item.sellingStatus.currentPrice
        price = str(price).replace("{'_currencyId': 'USD', 'value': ", "").replace("}", "").replace("'", "")
        Title = {"title": item.title, "price": price, "url": item.viewItemURL, "image": item.galleryURL, "date": date}
    
        json.dump(Title,file)
        file.write("\n")
    file.close()



    • Partager sur Facebook
    • Partager sur Twitter
      29 décembre 2021 à 9:36:35

      Ya beaucoup de choses qui ne vont pas ici :

      - C'est une mauvaise idée de mettre plusieurs json dans un même fichier. Tu devrais faire plutôt une liste de dictionnaires.

      - à la ligne 14, tu devrais faire date = date.strftime("%Y-%m-%d HH:MM:SS")

      - à la ligne 16, tu dois faire price = price["value"]

      - Il vaut mieux utiliser un bloc with pour ouvrir un fichier.

      Ensuite, je ne comprend pas bien ce que tu entend par "comparer".

      Supposons que j'ai un fichier.json comme celui là :

      [
          {"key1": "riri", "key2": "fifi"},
          {"key1": "loulou", "key2": "phooey"},
      ]

      Je peux y ajouter un nouveau dico comme ceci :

      import json
      
      with open("fichier.json") as file:
          liste = json.load(file)
      
      dico = {"key1": "riri":, "key2", "fifi"}
      liste.append(dico)
      
      with open("fichier.json", "w") as file:
          json.dump(liste, file)

      Si tu veux vérifier avant que le dico n'y est pas déjà, tu peux faire :

      if dico not in liste:
          dico.append(liste)





      -
      Edité par thelinekioubeur 29 décembre 2021 à 9:40:52

      • Partager sur Facebook
      • Partager sur Twitter
        29 décembre 2021 à 14:47:54

        GandalfLeJoyeux a écrit:

        il y'en a 1 par ligne et je cherche à les comparer à un autre fichier qui lui contient les nouveaux dictionnaire pour qu'il me renvoie ceux qui viennent d'arriver


        Ca serait bien de préciser d'où sort api (dans api.execute). Vu la requête on peut supposer qu'il s'agit de celle d'eBay... et si on part là dessus pourquoi ne pas utiliser le résultat bien rangé via l'instruction 'sortOrder': 'StartTimeNewest' pour trouver les nouveaux?

        • Partager sur Facebook
        • Partager sur Twitter
          29 décembre 2021 à 23:19:23

          thelinekioubeur a écrit:

          Ya beaucoup de choses qui ne vont pas ici :

          - C'est une mauvaise idée de mettre plusieurs json dans un même fichier. Tu devrais faire plutôt une liste de dictionnaires.

          - à la ligne 14, tu devrais faire date = date.strftime("%Y-%m-%d HH:MM:SS")

          - à la ligne 16, tu dois faire price = price["value"]

          - Il vaut mieux utiliser un bloc with pour ouvrir un fichier.

          Ensuite, je ne comprend pas bien ce que tu entend par "comparer".

          Supposons que j'ai un fichier.json comme celui là :

          [
              {"key1": "riri", "key2": "fifi"},
              {"key1": "loulou", "key2": "phooey"},
          ]

          Je peux y ajouter un nouveau dico comme ceci :

          import json
          
          with open("fichier.json") as file:
              liste = json.load(file)
          
          dico = {"key1": "riri":, "key2", "fifi"}
          liste.append(dico)
          
          with open("fichier.json", "w") as file:
              json.dump(liste, file)

          Si tu veux vérifier avant que le dico n'y est pas déjà, tu peux faire :

          if dico not in liste:
              dico.append(liste)





          -
          Edité par thelinekioubeur il y a environ 13 heures


          Bonsoir merci pour ton aide pour la ligne 14 et 16 je fais ainsi car l'api d'ebay me renvoie ceci 

          date': datetime.datetime(2021, 12, 29, 22, 1, 17) en retirant le début python me le met directement sous cette forme 2021-12-29 22:06:45

          'price': {'_currencyId': 'USD', 'value': '2.5'

          le but de ce script est de récupérer les derniers objets pokémon mis en vente sur ebay et de me notifier sous forme de webhooks discord

          pour ce faire il faut que j'organise les données qui me sont renvoyé ainsi que de vérifier quelle sont les nouvelles annonces (c'est ça ce que j'appelle comparer) . 

          J'essaye de faire un fichier texte dans le quel j'inscris un dictionnaire par ligne pour ensuite chercher les nouvelles annonces je sais pas si c'est une bonne méthode.

          Merci de ta réponse je vais regarder pour la liste de dictionnaire.

          mps a écrit:

          GandalfLeJoyeux a écrit:

          il y'en a 1 par ligne et je cherche à les comparer à un autre fichier qui lui contient les nouveaux dictionnaire pour qu'il me renvoie ceux qui viennent d'arriver


          Ca serait bien de préciser d'où sort api (dans api.execute). Vu la requête on peut supposer qu'il s'agit de celle d'eBay... et si on part là dessus pourquoi ne pas utiliser le résultat bien rangé via l'instruction 'sortOrder': 'StartTimeNewest' pour trouver les nouveaux?


          Merci de ta réponse oui c'est bien l'api d'Ebay plus précisement l'api finding pour ce qui est de sortOrder c'est déjà fait ligne 7.

          -
          Edité par GandalfLeJoyeux 29 décembre 2021 à 23:22:49

          • Partager sur Facebook
          • Partager sur Twitter
            3 janvier 2022 à 10:31:01

            Tu n'as pas compris ce que j'ai dit.

            Pour price :

            >>> price = {'_currencyId': 'USD', 'value': '2.5'}
            >>> price["value"]
            '2.5'
            

            Pour date :

            >>> import datetime
            >>> date = datetime.datetime(2021, 12, 29, 22, 1, 17)
            >>> date.strftime("%Y-%m-%d %H:%M:%S")
            '2021-12-29 22:01:17'



            Donc oublie les replace...

            -
            Edité par thelinekioubeur 3 janvier 2022 à 10:31:22

            • Partager sur Facebook
            • Partager sur Twitter
              3 janvier 2022 à 14:45:07

              tu peux aussi directement transformé la réponse de ta requête en dictionnaire

              resp_dict=response.dict()

              ce qui devrait  faciliter le reste aussi



              • Partager sur Facebook
              • Partager sur Twitter

              Comparer deux txt ligne par ligne

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown