2010-08-10 4 views
4

J'ai une liste de répertoires (leur chemin absolu). Chaque répertoire contient un certain nombre de fichiers. De ces fichiers je veux obtenir deux d'entre eux de chaque répertoire. Les deux fichiers que je veux ont un motif de chaîne dans leur nom, pour les besoins de cet exemple, les chaînes seront 'stringA', 'stringB'. Donc j'ai besoin d'une liste de tuples. Chaque ligne doit contenir un fichier stringA et un fichier stringB. Il devrait y avoir un tuple par répertoire. Chaque répertoire est garanti pour avoir plus de 2 fichiers et est garanti pour avoir seulement un stringA et un fichier stringB.Comment obtenir des fichiers à partir de répertoires en Python

Quel est le moyen le plus efficace de faire cela? Peut-être en utilisant un générateur de liste?

Edit:

Un exemple:

dirs = ['/dir1', '/dir2', '/dir3'] 

result = [('/dir1/stringA.txt', '/dir1/stringB.txt'), ('/dir2/stringA.txt', ...) ...] 

L'entrée est répertoires (une liste de répertoires) et la sortie devrait être le résultat (une liste de tuples).

Répondre

1

Voir si cela fonctionne pour vous:

import glob 
result = zip(sorted(glob.glob('/dir/*stringA*')), sorted(glob.glob('/dir/*stringB*'))) 
+0

+1 twas ma réponse aussi – awesomo

+0

est-il un moyen de généraliser le «/dir/* stringUn * » pour travailler pour un répertoire? Edit: En fait, je ne comprends pas comment cela fonctionne. Comment itère-t-il sur la liste des dictionnaires? –

+0

Bien sûr, il existe un moyen de généraliser à n'importe quel répertoire. Construisez simplement la chaîne manuellement en transmettant, par exemple, '/' + mydir + '/ * stringA *'. En outre, il n'y a pas d'itération sur les dictionnaires: glob() renvoie une liste de chaînes, et zip() "zippe" les deux listes de chaînes dans une liste de tuples (comme une fermeture à glissière). –

Questions connexes