python - Python中有没有办法以不区分大小写的方式将变量名与文件名进行比较?
问题描述
我有一个名为的函数get_book
,它通过它的title
参数打开请求的书。函数get_book
可以title
在任何情况下接收(例如Foo
, FOO
, fOo
)。虽然这本身不是问题,但如果title
's 匹配,函数检索书籍的 book 文件夹也有title
混合大小写的 book s。数据库文件夹是动态且连续的以接收新书文件名(例如Foo.pdf
,、、FOO.pdf
)FOo.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
解决方案
从一个空的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/")
很方便。)
推荐阅读
- python - 用python下载pdf
- r - ggplot2 的时间序列美学
- python - 运行python代码时VS代码“cd ~~~~~message”
- javascript - 如何在 Material UI Drawer 中使用 React Browser Router
- python - discord.py 更改文件大小以添加自定义表情符号
- java - JavaFX 图像未显示
- python - 返回一个数字的相反数的函数
- discord.py - Discord.py 奇怪的投注奖金问题
- vb.net - 如何在对象组合框中显示自定义 DisplayMember(即区域设置)
- php - 创建帖子时如何自动将特色图片添加到自定义帖子?