一线从可能的目录列表中获取文件的统一列表?

con*_*use 4 python directory list python-2.7

假设我们有一个目录列表,其中某些目录可能不存在

dirs = ['dir1','dir2','dir3']
Run Code Online (Sandbox Code Playgroud)

为了论证,仅存在两个,它们的内容是:

目录1
  --file1a
  --file1b
目录2
  --file2a
  --file2b

统一列出所有文件的最佳方式是什么?我最接近的是:

import os
files = [ os.listdir(x) for x in ['dir1','dir','dir3'] if os.path.isdir(x) ]
Run Code Online (Sandbox Code Playgroud)

但这给了我一个嵌套列表:

[['file1a','file1b'],['file2a','file2b']]
Run Code Online (Sandbox Code Playgroud)

如果我希望使用那种单线纸['file1a', 'file1b', 'file2a', 'file2b']呢?

Pad*_*ham 5

您可以将项目链接到一个列表中:

from itertools import chain as ch


files = list(ch.from_iterable(os.listdir(x) for x in ['dir1', 'dir', 'dir3'] if os.path.isdir(x)))
Run Code Online (Sandbox Code Playgroud)

我能做到的最短:

from itertools import chain as ch, ifilter as ifil, imap 
from os import path, listdir

files = list(ch.from_iterable(imap(listdir, ifil(path.isdir, ('dir1', 'dir', 'dir3')))))
Run Code Online (Sandbox Code Playgroud)

如果只想使用名称,则只需遍历链对象即可。