从输出中删除空列表

时间:2019-11-22 18:28:32

标签: python windows

以下代码遍历所有以“ 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']
[]
[]
[]
[]

如何消除输出中的这些空列表?我不确定为什么结果= [如果x!= []]中的x用于文件名中的x,不能解决此问题。

1 个答案:

答案 0 :(得分:0)

原因是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变量上添加一条打印语句,以检查它是否确实包含列表或字符串。