如果语句不起作用,请列出理解

2024-06-28 19:22:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试遍历目录中的所有文件,并对具有特定文件名的文件执行某些操作。出于某种原因,当我使用列表理解时,if语句不起作用,所有迭代似乎都进入if语句:

for filename in os.listdir(somepath):
    if (str(i_test) in filename for i_test in range(15,20)):
        do something

如果我在if语句中显式地写下数字,if语句将按预期工作:

for filename in os.listdir(somepath):
    if '15' in filename or ('16' in filename) or ('17' in filename) or ('18' in filename) or ('19' in filename):
        do something

我找不出我在名单上的什么地方搞砸了


Tags: or文件intest目录forifos
2条回答

您可以使用re

import re

to_find = re.compile('|'.join(map(str, range(15,21)))

for filename in os.listdir(somepath):
    if to_find.search(filename):
        #do something

首先,一个小问题,但这不是一个列表理解;这是一个生成器表达式。这里的差别不是很大,但它们是不同的。列表理解被包装在[]中,而生成器表达式使用()(就像这里一样)

第二,你基本上有:

if <generator expression>:

问题是生成器表达式本身永远不会为false(与列表理解的结果不同),因此条件始终为true

您想使用^{}来表示“如果任何测试都是真的”:

if any(str(i_test) in filename for i_test in range(15,20)):

相关问题 更多 >