首先,我按照正常的IF
语句检查给定条件。如果它是True
,则需要扫描所有文件中的单个关键字。如果不是True
,则需要在所有文件中扫描一组关键字,这些关键字将被提供。
对于我的简单工作示例,我只搜索字符串中的关键字,而不是扫描目录中的文件名。
test1 = "NotKeyWord"
password = "password"
password1 = "password1"
password2 = "password2"
password3 = "password3"
if test1.lower() == "keyword":
condition = password
else:
condition = [password1, password2, password3]
f = "password1_password2_password3_jibberish_E=mc2"
if condition in f:
print("Problem solved")
如果关键字=“关键字”(即单数),则此代码有效。精细。但是,我想这样做,以便在另一种情况下,这需要知道几个关键字来获取正确的文件,而我不必求助于显式地写出所有单词。
我可以写
if password1 in f and password2 in f and password3 in f:
print("problem solved")
但是我追求的是pythonic方法,希望该方法足够通用,能够处理长度未知的关键字数组,因此无法进行硬编码。
答案 0 :(得分:4)
这应该有效,
if all ( c in f for c in condition ):
print("problem solved")
答案 1 :(得分:3)
使condition
始终是列表,即使它只有一项:
if test1.lower() == "keyword":
condition = [password]
else:
condition = [password1, password2, password3]
然后使用all()
函数检查condition
中的所有元素是否存在于f中:
if all(c in f for c in condition):
print("problem solved")
无论condition
有一个元素,十个元素还是一百个元素,这都将起作用。
答案 2 :(得分:1)
一种方法是:
if [x for x in condition if x in f]:
...
答案 3 :(得分:1)
为使自己更轻松,在这两种情况下,我都会列出一个密码列表。如果test1是关键字,那么它只是一个列表。
if test1.lower() == "keyword":
passwords = [password]
else:
passwords = [password1, password2, password3]
然后,您可以将Python内置的all function与generator expression结合使用来构成第二个条件。
f = "password1_password2_password3_jibberish_E=mc2"
if all(pw in f for pw in passwords):
print("Problem solved")