【问题标题】:Python string comparison failing [duplicate]Python字符串比较失败[重复]
【发布时间】:2021-02-10 12:23:20
【问题描述】:

small Python prog' 通过匹配扩展名对下载文件夹进行排序,
我在下面得到一个 False (在我看来)字符串匹配。 我进行了搜索,但似乎只发现了有关 REGEX 匹配或更复杂的问题!

分开扩展

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

为了便于匹配,将小写字母去掉,去掉开头的“.”
我怀疑我的问题在这里..

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

下面的测试对除了“S22F350FH.icm”之外的所有东西都可以正常工作, 用于设置显示器的配色方案文件。

我打印出显示为“icm”的“扩展名”,但 我得到的是 FALSE 匹配 在此代码中针对各种图像类型的扩展:

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

欣赏你的想法。

【问题讨论】:

  • if extension == "jpg" or "jpeg" or "png" or "gif" or "bmp" 这一行没有icm。
  • @MayankPorwal "icm" 是文件名的扩展名,它在变量 "extension" 中,这是在 "splitext(filename)" 代码中完成的。
  • @Dee 知道了。请检查我的答案。让我知道这是否适合您。

标签: python python-3.x string comparison


【解决方案1】:

您应该使用:而不是if extension == "jpg" or "jpeg" or "png" or "gif" or "bmp":

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

【讨论】:

    【解决方案2】:

    解释器对条件句的处理方式如下:

    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"]:。

    【讨论】:

    • 好吧,这很有趣,“真实”,但有趣的是我还有其他几行用于匹配其他文件类型(PDF[pdf]、Docs[xlsx、docx、odt、ods]、ZIPS[ zip, gz, tar]),但只有这个文件滑过。 O_O
    • @Dee 试试bool("jpg") 和bool("")。当转换为布尔值时,非空字符串为True。这导致了术语truthy。
    • 谢谢,我明白了;所以我的 if extension == "jpg" 是字符串比较的糟糕选择。 Mayank 的答案肯定是有效的,而且也更简洁。所以双赢。我将重新编写我的其他代码以尝试删除“真实”的比较 - 幸运的是我猜他们到目前为止工作? =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2016-07-05
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多