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 :

Recherche d'un module python pour télécharger plusieurs fichiers d'un seul coup dans plusieurs répertoires


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Par défaut Recherche d'un module python pour télécharger plusieurs fichiers d'un seul coup dans plusieurs répertoires
    Bonjour à tous.

    Je précise que je suis un débutant en python et je n'y connais pas grand chose en réseaux.

    Je vais d'abord expliciter les faits.

    Je dois actuellement télécharger plusieurs fichiers issus du cadastre à partir de cette URL :https://cadastre.data.gouv.fr/data/e...json/communes/.
    En allant plus loin dans le répertoire on peut sélectionner le code INSEE de la commune à partir de laquelle on cherche à extraire le cadastre.
    En entrant dans le répertoire on a quatre fichiers différents qui constituent chacun une partie du cadastre (battît, parcelles,etc..)

    Ce que je cherche à faire.
    A partir d'un fichier excel qui récence des codes Insee de communes, je voulais savoir s'il serait possible d'effectuer une requête sur le site afin de télécharger les fichiers du cadastre d'après cette même liste.

    Auriez-vous donc des modules python à me conseiller qui me permettraient de faire des itérations sur les répertoires de ce site et de télécharger les fichiers quand il trouve une correspondance avec une liste ?
    J'avais déjà en tête de faire une itération à partir du module CSV et de boucler sur chacun des répertoires.

    Merci beaucoup !

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Par exemple, avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import subprocess
     
    url="https://cadastre.data.gouv.fr/data/etalab-cadastre/2018-04-03/geojson/communes/56/56001/"
     
    subprocess.call(["wget", "-r", "-np", "-nd", "-A.json.gz", url])
    Je récupère 29 fichiers en json.gz.
    Un début ?

  3. #3
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Par défaut
    Bonjour.
    J'ai essayé ton script de mon coté, mais il me donne le message d'erreur suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Traceback (most recent call last):
      File "C:\Users\pidega\AppData\Local\Programs\Python\Python36\tets.py", line 5, in <module>
        subprocess.call(["wget", "-r", "-np", "-nd", "-A.json.gz", url])
      File "C:\Users\pidega\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 267, in call
        with Popen(*popenargs, **kwargs) as p:
      File "C:\Users\pidega\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 709, in __init__
        restore_signals, start_new_session)
      File "C:\Users\pidega\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 997, in _execute_child
        startupinfo)
    FileNotFoundError: [WinError 2] Le fichier spécifié est introuvable

    J'ai bien vérifié que le module était installé en lançant un script avec uniquement la première ligne. Je suis aussi allé voir s 'il était bien installé dans les fichiers de librairies.
    D'où viendrait le problème ?

    Je suis donc allé regardé sur internet pour voir comment fonctionnait ce module : https://docs.python.org/3.7/library/subprocess.html
    Si j'ai bien compris, il permet de lancer des requêtes et ensuite de récupérer les résultats de cette dernière ? Que ce soit une requête batch, une url à lancer.

    Merci !

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Flûte ! Serait-ce une commande spécifique à Linux ?
    Une idée peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import wget
    wget.download(url)
    A essayer, je n'ai pas windows. J'essaierai du boulot sinon cet après-midi.
    Sinon, il y a des choses comme urllib.

  5. #5
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Géomaticien

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Par défaut
    J'ai pu essayer sur un lien et ça marche !

    Au lieu d'effectuer la requête sur le premier lien je l'ai lancée directement sur le lien téléchargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://cadastre.data.gouv.fr/data/etalab-cadastre/2018-10-01/geojson/communes/23/23015/cadastre-23015-prefixes_sections.json.gz
    Il me resterait à boucler sur des parties précises de cette url pour automatiser tout ça.

    Je reviens bientôt avec du nouveau

    Merci encore!

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Moi, ce que je trouverais rigolo, c'est de représenter cela sous forme de carte.
    Je ne trouve pas de module spécifique.
    Je me réponds tout seul : j'ai réussi à afficher une commune. Si cela intéresse qqn...
    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
    import json  
    import gzip
    import matplotlib.pyplot as plt
     
    fich = "cadastre-56001-communes.json.gz"
    with gzip.open(fich, "rb") as f:
        data = json.loads(f.read(), encoding="utf-8")
    features = (data["features"])[0]
    geometry = features["geometry"]
    coordonnees = (geometry["coordinates"])[0][0]
    #print(coordonnees)
    Lx=[]
    Ly=[]
    Lz=[]
    for elem in coordonnees:
        Lx.append(elem[0])
        Ly.append(elem[1])
    plt.plot(Lx,Ly)
    plt.gca().set_aspect('equal')
    plt.show()
    Le département du Morbihan :
    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 gzip
    import matplotlib.pyplot as plt
     
    rep = "/home/marco5/Bureau/cadastre/morbihan-communes/"
    fich = "cadastre-"
    comm = "-communes.json.gz"
    for i in range(56001,56265):
        try:
            with gzip.open(rep+fich+str(i)+comm, "rb") as f:
                data = json.loads(f.read(), encoding="utf-8")
            features = (data["features"])[0]
            geometry = features["geometry"]
            coordonnees = (geometry["coordinates"])[0][0]
            #print(coordonnees)
            Lx=[]
            Ly=[]
            Lz=[]
            for elem in coordonnees:
                Lx.append(elem[0])
                Ly.append(elem[1])
            plt.plot(Lx,Ly)
            plt.gca().set_aspect('equal')
        except:
            pass
    plt.show()

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/06/2014, 15h47
  2. Réponses: 2
    Dernier message: 15/05/2014, 11h58
  3. traiter plusieurs fichiers d'un seul coup
    Par hajarita dans le forum Langage
    Réponses: 15
    Dernier message: 24/05/2012, 09h08
  4. Vérifier/uploader plusieurs fichier d'un seul coup ?
    Par Marmotton76 dans le forum Langage
    Réponses: 6
    Dernier message: 28/08/2011, 10h04
  5. Modifier les propriétés de plusieurs fichiers en un seul coup
    Par 00Dexter00 dans le forum SharePoint
    Réponses: 4
    Dernier message: 08/12/2009, 09h12

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