以下代码遍历所有以“ 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,不能解决此问题。
答案 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
变量上添加一条打印语句,以检查它是否确实包含列表或字符串。