2016-03-18 3 views
2

J'utilise Glob.Glob pour rechercher un dossier et les sous-dossiers qu'il contient pour toutes les factures que j'ai. Pour simplifier que je vais ajouter le programme au menu contextuel, et ont-il le chemin que la première partie de,Obtention du dossier Chemin du dernier emplacement J'ai cliqué avec le bouton droit sur Python

import glob 

for filename in glob.glob(path + "/**/*.pdf", recursive=True): 

    print(filename) 

Je l'ai garder la liste et envoyer ces fichiers à une imprimante , dans une version plus récente, mais pour l'instant écrire juste le nom est un assez bon test.

Donc, ma question est double:

  1. Y at-il quelque chose de fondamentalement mal avec la façon dont j'écris ceci?
  2. Quelqu'un peut-il me diriger dans la direction de la façon de capturer réellement le chemin du dossier et le fournir en tant que variable de chemin?

Répondre

1

Vous devriez jeter un oeil à cette question: Python script on selected file. Il montre comment configurer une commande "Envoyé à" dans le menu contextuel. Cette commande appelle un script python et fournit le nom du fichier envoyé via sys.argv[1]. Je suppose que cela fonctionne également pour un répertoire.

0

Je n'ai pas Python3.5 pour que je puisse définir l'indicateur recursive=True, donc je préfère vous fournir une solution que vous pouvez utiliser sur n'importe quelle version de Python (connue jusqu'au jour).

La solution consiste à utiliser l'appel os.walk() pour exécuter l'exploration des répertoires et le type de construction set.

Il est préférable d'utiliser set au lieu de list car avec celui-ci, vous aurez besoin de plus de code pour vérifier si le répertoire que vous voulez ajouter n'est pas déjà listé. Donc, fondamentalement, vous pouvez garder deux ensembles: un pour les noms des fichiers que vous souhaitez imprimer et l'autre pour les répertoires et leurs sous-dossiers.

Vous pouvez adapat cette solution à votre classe/méthode:

import os 

path = '.' # Any path you want 
exten = '.pdf' 
directories_list = set() 
files_list = set() 
# Loop over direcotries 
for dirpath, dirnames, files in os.walk(path): 
    for name in files: 
     # Check if extension matches 
     if name.lower().endswith(exten): 
      files_list.add(name) 
      directories_list.add(dirpath) 

Vous pouvez ensuite boucle sur directories_list et files_list les imprimer.