我已完成操作系统漫游并将结果附加到列表中。
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文件
提前致谢。
答案 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']
因此,如果你有一个完整的元组列表,你将使用两个嵌套循环。