python - 从输出中删除空列表
问题描述
以下代码遍历所有以“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 != []]没有解决这个问题。
解决方案
原因是其中的元素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
以检查它是否确实包含列表或字符串。
推荐阅读
- tfs - 从 Azure Data Studio 连接到 Team Foundation Server
- c - 我的代码不工作。我做错了吗?
- angular6 - 刷新如何在angular6中保持相同的路线?
- php - 如何使用 PHP 的 PDO 对象发送 SQL 更新查询
- debian - 安装 rsyslog(Debian)时出现问题。存储库未签名
- python - 如何使用 FOR 循环将两个列表中的元素附加到一个空列表中?
- android - 检测设备是否关闭了 touch id 功能
- java - 如何修复我的 do-while 循环中的逻辑,然后应用 try-catch 块来捕获并显示来自另一个类的错误消息?
- ios - 点击 SWIFT 获取 NSAttributed 字符串颜色
- typescript - 如何使用泛型的类名作为结果类型的字符串值