Простое понимание списка - PullRequest
3 голосов
/ 24 июля 2010

Я хочу словарь файлов:

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

Но я получаю,

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

когда захочу

files = ['filename1', 'filename2']

Как предотвратить цикл через этот кортеж? Спасибо!

Ответы [ 4 ]

7 голосов
/ 24 июля 2010

Обе эти работы:

[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']
3 голосов
/ 25 июля 2010
files = [filename for (subdir, dirs, files) in os.walk(rootdir) for filename in files]
2 голосов
/ 24 июля 2010
for (subdir, dirs, f) in os.walk(rootdir): files.extend(f)
0 голосов
/ 29 июля 2010
import os, glob

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

если ваши файлы имеют расширения, то еще проще:

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