首页 > 解决方案 > 从输出中删除空列表

问题描述

以下代码遍历所有以“F3E3”开头的子目录,然后检索文件名中包含“0.1Hz”的所有 csv 文件。然后我按最后创建的 csv 文件对这些 csv 文件进行排序。

    directory = r"\DATA"
    subdirs = [os.path.join(directory, fl) for fl in os.listdir(directory) if fl.startswith("F3E3")]
    for subdir in subdirs:
        filenames = [os.path.join(subdir, fl) for fl in os.listdir(subdir) if fl.endswith(".csv") and ("0.1Hz" in fl)]
        result = [x for x in filenames if x != []]
        final_list = sorted(result, key=os.path.getctime, reverse=True)
        print (final_list)

问题是某些以“F3E3”开头的子目录不包含任何文件名中包含“0.1Hz”的csv文件。因此,代码正在输出:

[]
[]
[]
[]
[]
['\DATA\\F3E31\\F3E31TEST_0.1Hz_2017-01-28.csv','\DATA\\F3E31\\F3E31TEST_0.1Hz_2017-01-27.csv']
['\DATA\\F3E317\\F3E317_TEST_0.1Hz_2017-02-18.csv', '\DATA\\F3E317\\F3E317_TEST_0.1Hz_2017-02-17.csv']
[]
[]
[]
[]

如何摆脱输出中的这些空列表?我不确定为什么result = [x for x in filenames if x != []]没有解决这个问题。

标签: pythonwindows

解决方案


原因是其中的元素filenames不是列表,它们是字符串。因此,x != []总会过去的。所以准备的循环result真的什么都不做。您将不得不使用 if 语句,例如

if len(filenames) > 0:
    final_list = sorted(result, key=os.path.getctime, reverse=True)

或者

if len(filenames) == 0: continue

代替result线。

您应该在变量上添加一条打印语句filenames以检查它是否确实包含列表或字符串。


推荐阅读