Python:过滤返回空列表的列表

时间:2014-02-23 22:13:43

标签: python list filter

我已完成操作系统漫游并将结果附加到列表中。

exportFolder = []

for files in os.walk(exportLocation):
   exportFolder.append(files)

这是存储为exportFolder的列表:

[('/home/simon/Desktop/Windows.edb.export', [], ['MSysUnicodeFixupVer2.2', 'SystemIndex_0P.6', 'SystemIndex_0A.7', 'SystemIndex_GthrPth.5', 'SystemIndex_Gthr.4', 'MSysObjects.0', '__NameTable__.3', 'MSysObjectsShadow.1'])]

我想在列表中搜索文件'SystemIndex_0A'

所以我用:

filter(lambda x: 'SystemIndex_0A' in x, exportFolder)

结果带回一个空列表:[]

我可以看到exportFolder列表似乎是列表中的列表。如何让我的过滤器工作?

我想从列表中打印SystemIndex_OA文件

提前致谢。

1 个答案:

答案 0 :(得分:1)

也许重写你的walk循环看起来更像这样:

tgt=[]
for root, dirs, files in os.walk(exportLocation):
    for file in files:
        if 'SystemIndex_0A' in file:
            tgt.append(os.path.join(root, file))

然后您不需要过滤嵌套的元组列表。

如果你希望使用os.walk生成的元组列表,你会做这样的事情(使用你的例子,所以我们只使用第一个元组):

>>> LoT=[('/home/simon/Desktop/Windows.edb.export', [], ['MSysUnicodeFixupVer2.2', 'SystemIndex_0P.6', 'SystemIndex_0A.7', 'SystemIndex_GthrPth.5', 'SystemIndex_Gthr.4', 'MSysObjects.0', '__NameTable__.3', 'MSysObjectsShadow.1'])]
>>> 
>>> path, dirs, files=LoT[0]
>>> path
'/home/simon/Desktop/Windows.edb.export'
>>> dirs
[]
>>> files
['MSysUnicodeFixupVer2.2', 'SystemIndex_0P.6', 'SystemIndex_0A.7', 'SystemIndex_GthrPth.5', 'SystemIndex_Gthr.4', 'MSysObjects.0', '__NameTable__.3', 'MSysObjectsShadow.1']

现在您已经使用元组解压缩来解压缩元组,您可以使用您的过滤器语句:

>>> filter(lambda x: 'SystemIndex_0A' in x, files)
['SystemIndex_0A.7']

因此,如果你有一个完整的元组列表,你将使用两个嵌套循环。