Python字符串比较失败[重复]

raogr8fs  于 2023-02-06  发布在  Python
关注(0)|答案(2)|浏览(132)
    • 此问题在此处已有答案**:

Why does "a == x or y or z" always evaluate to True? How can I compare "a" to all of those?(8个答案)
Check if string ends with one of the strings from a list(7个答案)
两年前关闭了。
一个小的Python程序,通过匹配扩展名对下载文件夹进行排序,
我在下面得到了一个假的(在我看来)字符串匹配。我搜索了一下,但似乎只找到了关于正则表达式匹配的问题,或者更复杂的东西!
分离延伸导线

for filename in os.listdir(src_base_folder):
orig_title, orig_ext = os.path.splitext(filename)

小写以便于匹配,并去掉开头的""。
我怀疑我的问题就在这里。

extension = str.lower(orig_ext)[1:]

除了"S22F350FH.icm"(一个用于设置显示器的配色方案文件)之外,下面的测试对所有内容都运行良好。
我打印出了"extension",显示为"icm",但是我在此代码中得到了一个FALSE匹配,与各种图像类型的扩展名相匹配:

if extension == "jpg" or "jpeg" or "png" or "gif" or "bmp":

感谢你的想法。

mrphzbgm

mrphzbgm1#

您应该使用以下命令,而不是if extension == "jpg" or "jpeg" or "png" or "gif" or "bmp"

if extension in ["jpg", "jpeg", "png", "gif", "bmp"]:
qacovj5a

qacovj5a2#

解释器按如下方式处理条件:

if expr_1 or expr_2 or expr_3:

更准确地说,

if (expr_1) or (expr_2) or (expr_3)

在评估程序时,解释器将if extension == "jpg" or "jpeg" or "png" or "gif" or "bmp"视为:

if (extension == "jpg") or ("jpeg") or ("png") or ("gif") or ("bmp"):

因为非空字符串是真实的,所以它的计算结果总是True,而使用@Mayank建议的if extension in ["jpg", "jpeg", "png", "gif", "bmp"]:

相关问题