繁体   English   中英

One-liner从可能的目录列表中获取平面文件列表?

[英]One-liner to get flat list of files from a list of possible directories?

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

dirs = ['dir1','dir2','dir3']

为了论证,只有两个存在,其内容是:

dir1
  --file1a
  --file1b
dir2
  --file2a
  --file2b

获得所有文件的平面列表的最佳单行程序是什么? 我得到的最接近的是:

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

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

[['file1a','file1b'],['file2a','file2b']]

我需要使用什么单行,如果我想要['file1a', 'file1b', 'file2a', 'file2b']

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

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

最短的我可以做到:

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

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

不知道为什么单线是你想要的,但在这里:

files = [path for dir_lst in map(os.listdir, filter(os.path.isdir, ['dir1','dir','dir3'])) for path in dir_lst]

这首先过滤非目录(使用filter ),然后在剩下的内容上map os.listdir ,并使用两个for循环进行聚合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM