2010-07-24 9 views
3

Je veux un dictionnaire de fichiers:compréhension de liste simple

files = [files for (subdir, dirs, files) in os.walk(rootdir)] 

Mais je reçois,

files = [['filename1', 'filename2']] 

quand je veux

files = ['filename1', 'filename2'] 

Comment puis-je éviter une boucle à travers ce tuple? Merci!

+3

duplication possible de [Aplatissement d'une liste superficielle en python] (http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python) – kennytm

+0

Aussi [Création d'une liste à plat dans la liste des listes en python] (http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python) –

+0

oublier mes fichiers = [f pour f dans fichiers pour (subdir, dirs, fichiers) dans os.walk (rootdir)] Je pense qu'il existe de nombreux effets secondaires. Je vais supprimer la réponse – luc

Répondre

7

Ces deux travaux:

[f for (subdir, dirs, files) in os.walk(rootdir) for f in files] 

sum([files for (subdir, dirs, files) in os.walk(rootdir)], []) 

Exemple de sortie:

$ find /tmp/test 
/tmp/test 
/tmp/test/subdir1 
/tmp/test/subdir1/file1 
/tmp/test/subdir2 
/tmp/test/subdir2/file2 
$ python 
>>> import os 
>>> rootdir = "/tmp/test" 
>>> [f for (subdir, dirs, files) in os.walk(rootdir) for f in files] 
['file1', 'file2'] 
>>> sum([files for (subdir, dirs, files) in os.walk(rootdir)], []) 
['file1', 'file2'] 
2
for (subdir, dirs, f) in os.walk(rootdir): files.extend(f) 
+2

Et avant cela 'files = []'. –

3
files = [filename for (subdir, dirs, files) in os.walk(rootdir) for filename in files] 
0
import os, glob 

files = [file for file in glob.glob('*') if os.path.isfile(file)] 

si vos fichiers ont des extensions, puis encore plus simples:

import glob 
files = glob.glob('*.*')