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 :

Supprimer les Guillemets autour des éléments d'une liste [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Base de données
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Par défaut Supprimer les Guillemets autour des éléments d'une liste
    Bonjour,

    J'utilise un API afin d'alimenter ma base de données.

    Pour fonctionner, l'API utilise une liste afin de lancer une requête avec plusieurs arguments.

    Je voulais automatiser le lancement de mes requetes avec une boucle python qui irait lire les lignes à ajouter à la liste dans un fichier texte.

    Le soucis est que l'orsque je regarde le contenu de ma liste, les éléments sont entourés par des guillemets et cela bloque la requête HTTP.

    Je voulais donc savoir si il était possible d'avoir le contenu de la liste sans les guillemets entre les différents éléments.


    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
    import json
    import urllib
     
    num = "744053100"
    deb = "{'mpn': '"
    fin = "'}"
    var = str(deb) + str(num) + str(fin)
     
    queries = []
     
    queries.append(var)
    queries.append(var)
     
    print(queries)
     
    #Retourne ["{'mpn': '744053100'}", "{'mpn': '744053100'}"]
     
    #Pour fonctionner, il faudrait : [{'mpn': '744053100'}, {'mpn': '744053100'}]
    Merci d'avance pour votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Bonjour

    Si je comprend bien, vous souhaitez que votre chaine de caractère soit interprété comme un dictionnaire

    Si tel est le cas, la fonction eval devrait vous aider

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Quand un fichier est lu, Python lit une chaine de caractère. Si c'est un nombre, python ne peut pas le deviner. Il faut faire les conversions !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ma_chaine = '123'
    mon_nombre=int(ma_chaine)
    Là tu as une chaine de caractère alors que tu voudrais un dictionnaire. Tu ne peux pas convertir une chaine de caractère en dictionnaire (à moins de mofier un peu ta chaine de carac et de faire un eval dessus, ce qui est juste super crade).
    Mais si dans ton fichier il y a une structure de dictionnaire, c'est peut etre un json ? Je te vois importer la librairie sans l'utiliser en plus. Dans ce cas pour lire ton fichier, utilise les fonction de la librairie json. Tu auras directement des structures en dictionnaires plutôt que de t'embeter avec des chaines de carcatères dont tu n'as pas besoin.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Base de données
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Par défaut
    Je n'ai pas mis tout mon code.

    Pour mieux vous expliquer voici le code qui fonctionne :

    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
    39
    40
     
    import json
    import urllib
     
    queries = [
        {'mpn': 'AD22105ARZ'},
    	{'mpn': 'CHP2010L0R49JNT'},
    	{'mpn': '51021-0300'},
    	{'mpn': '52271-3069'},
    	{'mpn': 'GRM40X7R105K16PT'}
        ]
     
    url = 'http://octopart.com/api/v3/parts/match?queries=%s' \
        % urllib.quote(json.dumps(queries))
    url += '&apikey=b43604c2'
    url += "&include[]=imagesets"
     
    data = urllib.urlopen(url).read()
    response = json.loads(data)
     
    print (url)
     
    # print request time (in milliseconds)
    print (response['msec'])
     
    # print mpn's
    for result in response['results']:
        for item in result['items']:
            countL = 0
            countM = 0
            print (item['mpn'])
            for pict in item['imagesets']:
               if pict['large_image']:
                  if countL == 0:
                     print("Url image grande : %s" % pict['large_image']['url'])
                     countL = countL + 1
               if pict['medium_image']:
                   if countM == 0:
                      print("Url image moyenne : %s" % pict['medium_image']['url'])
                      countM = countM + 1
    Mon objectif est de remplir la liste queries automatiquement en lisant les valeurs dans un fichier texte.

    Voici mon code qui fonctionne si il n'y a pas les guillemets autour des éléments de la liste :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    import json
    import urllib
     
    #Ouvre le fichier avec les références
    file = open('..\Ref_PourOctopart.txt','r')
     
    nbLignes = 0
     
    #Recup le nb de lignes du fichier texte
    for ligne in file:
        nbLignes = nbLignes + 1
     
    nbReste = nbLignes
    nbFait = 0
     
    print(nbLignes)
    print(nbReste)
    i = 0
    QuerieOcto = []
    while nbReste <> 0:
        nbReste = nbLignes - nbFait
        print(nbReste)
        file = open('..\RefImage.txt','r', encoding='ansii')
        for line in file:
            if nbReste > 19:
                if i < 19:
                    QuerieOcto.append(line.rstrip())
                    i = i + 1
                    print (line)
                elif i == 19:
                    QuerieOcto.append(line.rstrip())
                    i = i + 1
                    print (line)
                    print QuerieOcto[0]
     
                    url = 'http://octopart.com/api/v3/parts/match?queries=%s' \
                    % urllib.quote(json.dumps(QuerieOcto))
                    print(url)
                    url += '&apikey=b43604c2'
                    url += "&include[]=imagesets"
     
                    f = open('..\ResultImage.txt','a')
     
                    f.write(url)
     
                    data = urllib.urlopen(url).read()
                    response = json.loads(data)
     
                    # print mpn's
                    for result in response['results']:
                        for item in result['items']:
                            countL = 0
                            countM = 0
                            for pict in item['imagesets']:
                                if pict['medium_image']:
                                    if countM == 0:
                                        f.write("Ref : %s" % item['mpn'] + " | Url image moyenne : %s" % pict['medium_image']['url'] + '/n')
                                        countM = countM + 1
                    f.close()
                    nbFait = nbFait + i
                    QuerieOcto = []
                    i=0
       #etc...
    L'orsque je test en copiant l'url que me fournis mon script qui récupère les données dans le fichier texte, l'API m'indique que "queries" doit être une liste.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Il y a tout, sauf ce qu'il faut ... Ce que tu souhaites faire de la liste, ne fait pas parti du problème (sauf si j'ai pas bien compris un truc)

    Citation Envoyé par raspitoine Voir le message
    Mon objectif est de remplir la liste queries automatiquement en lisant les valeurs dans un fichier texte.
    Ok, et bien fournit un exemple de fichier et juste le code avec lequel tu le lis ! Un MWE quoi (Minimal Working Example) qui comme son nom l'indique se doit d'être le plus concis possible mais être autonome (il a tout ce qu'il faut pour fonctionner).

    Difficile de te dépanner autrement.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Base de données
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Par défaut
    Bonjour,

    Voici le code que j'utilise pour lire et ajouter les lignes dans la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    file = open('..\RefImage.txt','r')
    for line in file:
        QuerieOcto.append(line.rstrip())
    file.close()
    Et voici un exemple du contenu de mon fichier :

    {'mpn': '744053100'}
    {'mpn': '744043471'}
    {'mpn': '744042120'}
    {'mpn': '74404063470'}
    {'mpn': '71920-308LF'}
    {'mpn': '7-188275-6'}
    {'mpn': '7105-1521-019'}
    {'mpn': '710031-2'}
    {'mpn': '70V09L15PF'}
    {'mpn': '70IMX7-24-24-8G'}
    {'mpn': '70IMX7-05-05-8G'}
    {'mpn': '70IMX35D05D12-8G'}
    {'mpn': '74279202'}
    {'mpn': '7427511'}

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Ce fichier c'est toi qui l'a construit ou bien tu l'as pris quelque part ? Car son format est bizarre.

    Par exemple si le fichier était :
    [
    {"mpn": "744053100"},
    {"mpn": "744043471"},
    {"mpn": "744042120"},
    {"mpn": "74404063470"},
    {"mpn": "71920-308LF"},
    {"mpn": "7-188275-6"},
    {"mpn": "7105-1521-019"},
    {"mpn": "710031-2"},
    {"mpn": "70V09L15PF"},
    {"mpn": "70IMX7-24-24-8G"},
    {"mpn": "70IMX7-05-05-8G"},
    {"mpn": "70IMX35D05D12-8G"},
    {"mpn": "74279202"},
    {"mpn": "7427511"}
    ]

    (donc juste remplacer les simples quotes par des guillemets, mettre le tout dans une liste (avec les []), et séparer chacun des éléments par une virgule (donc pas de virgule après le dernier élément)).
    Dans ce cas là tu pourrais faire tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import json
     
    with open('..\RefImage.txt','r') as f : 
          queries=json.load(f)
     
    print(queries)
    où queries aurait pile la forme que tu veux. Note au passage la syntaxe avec le mot-clé with (qui permet de ne pas avoir à fermer le fichier, il se ferme automatiquement lorsque le code sort de la boucle)



    Autrement on pourrait imaginer avoir un fichier aussi de ce type là (moins lourd) :
    744053100
    744043471
    744042120
    74404063470
    71920-308LF
    7-188275-6
    7105-1521-019
    710031-2
    70V09L15PF
    70IMX7-24-24-8G
    70IMX7-05-05-8G
    70IMX35D05D12-8G
    74279202
    7427511

    Et dans ce cas, on construit queries ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with open('..\RefImage.txt','r') as f : 
           mpn_list=f.readlines()
     
    print(mpn_list)
    queries = [{ "mpn":val } for val in mpn_list ]
    print(queries)
    Si c'est toi qui a construit ce fichier, je t'invite donc à le modifier (ou à modifier le code par lequel tu l'as construit) pour qu'il ait l'un des 2 formats précédents.
    Si ce n'est pas toi qui a construit ce fichier, tu vas devoir trouver une parade qui va revenir à faire une conversion dans un de ces 2 formats.

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

Discussions similaires

  1. [Prototype] Supprimer des éléments d'une liste
    Par baggie dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 05/06/2012, 12h22
  2. [XL-2003] supprimer les Guillemets autour du nom de fichier à enregistrer
    Par comme de bien entendu dans le forum Excel
    Réponses: 14
    Dernier message: 11/08/2011, 11h40
  3. Réponses: 8
    Dernier message: 10/03/2009, 12h22
  4. Réponses: 7
    Dernier message: 23/04/2008, 10h21
  5. Supprimer des éléments d'une liste
    Par espadon1 dans le forum Langage
    Réponses: 2
    Dernier message: 31/05/2006, 15h08

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