2010-07-24 56 views
3

我想要的文件的字典:简单的列表理解

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

,但我得到,

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

时,我想

files = ['filename1', 'filename2'] 

如何避免通过元组循环?谢谢!

+3

[在python中展开浅层列表]的可能的副本(http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python) – kennytm 2010-07-24 19:20:48

+0

另请参见:[使平面列表脱离列表在Python中列表](http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python) – 2010-07-24 19:27:19

+0

忘记我的文件= [f为f in os.walk(rootdir)中的(subdir,dirs,files)文件]我认为有很多副作用。我将删除答案 – luc 2010-07-24 19:30:56

回答

7

这两项工作:

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

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

输出示例:

$ 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

并在此之前'files = []'。 – 2010-07-24 20:23:47

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)] 

如果你的文件有扩展,那么就更简单了:

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