首页 > 解决方案 > Python中有没有办法以不区分大小写的方式将变量名与文件名进行比较?

问题描述

我有一个名为的函数get_book,它通过它的title参数打开请求的书。函数get_book可以title在任何情况下接收(例如Foo, FOO, fOo)。虽然这本身不是问题,但如果title's 匹配,函数检索书籍的 book 文件夹也有title混合大小写的 book s。数据库文件夹是动态且连续的以接收新书文件名(例如Foo.pdf,、、FOO.pdfFOo.pdf

我的问题是如何title在不更改数据库中文件名的情况下比较 s 并随后检索请求的书?有没有一种无需担心大小写匹配的有效方法来打开文件?

我的代码:

def get_book(title):
    """
    Retrieves a book by its title. If no such
    book exists, the function returns None.
    """
    try:
        f = default_storage.open(f"books/{title}.pdf")
        return f.read().decode("utf-8")
    except FileNotFoundError:
        return None

标签: pythondjangoperformance

解决方案


从一个空的lower_to_name字典开始。对于每个新标题,像这样探测它:

title = title.lower() + ".pdf"
title = lower_to_name.get(title, title)

获取FileNotFoundError标题后,使用glob重试一次以查找实际文件名:

lower_to_name = {name.lower(): name
                 for name in glob.glob("*.pdf")}
title = lower_to_name.get(title, "no_such_file")

(您可能会发现这os.chdir("books/")很方便。)


推荐阅读