tags:

views:

124

answers:

4

I want a dictionary of files:

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

But I get,

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

when I want

files = ['filename1', 'filename2']

How do I prevent looping through that tuple? Thanks!

+2  A: 
for (subdir, dirs, f) in os.walk(rootdir): files.extend(f)
aaa
And before this `files = []`.
Cristian Ciupitu
+5  A: 

Both of these work:

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

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

Sample output:

$ 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']
John Kugelman
+3  A: 
files = [filename for (subdir, dirs, files) in os.walk(rootdir) for filename in files]
Tony Veijalainen
A: 
import os, glob

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

if your files have extensions, then even simpler:

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