【发布时间】:2021-09-22 12:16:54
【问题描述】:
编辑:这个问题与列表理解完全无关。问题是由于没有将完整路径传递给os.path.isfile(),而只是将文件名传递给了os.path.isfile(),这使得它总是评估为False。
为什么这个列表解析前面的 if/else 不能按预期工作?下面的语句生成了一个全为 0 的列表(其他情况)。
[1 if os.path.isfile(file) else 0 for file in os.listdir(path)]
如果文件是文件,预期输出将为 1,如果文件是目录,则预期输出为 0
我已经在另一条线上独立测试了1 if os.path.isfile(file) else 0,它按预期工作(1 和 0 混合)。我的列表理解语句找不到任何语法问题。
更有趣的是,如果我将条件替换为其他内容,例如 1 if file else 0,则行为会发生翻转。现在每个项目都变为 1,即使有些项目预期为 0(再次,我使用完全相同的条件表达式独立验证了它们)
我尝试将bool() 添加到我的情况中,但它什么也没做。我也试过 str(file) 也没有区别。
【问题讨论】:
-
这听起来与列表理解无关。您将文件名而不是完整文件路径传递给
isfile。 -
file在布尔上下文中总是会计算为True。否则,您需要提供更多信息,以使其成为可重现的示例。 -
@a_guest Wut?这似乎很误导......
-
@deceze 你是什么意思?
-
@a_guest
file在哪里被评估为布尔值?
标签: python list operating-system list-comprehension