我正在开发一个支持头像的 django 项目,系统(这不是最好的,但需要维护)要求我们在用户生成的头像文件中嵌入格式为 YYYYMMDDHHMM 的时间戳,并将其与 user_id 连接起来,例如例子:
23_201308080930.png
我编写了一个函数来解析这些文件名并返回最新的时间戳:
def _get_timestamp(self):
"""Return the timestamp of a user's most recently uploaded avatar."""
path = settings.USER_AVATAR_DIRECTORY + self._get_dir()
user_id = self.user_id
file_re = re.escape(str(user_id)) + r"_\d{12}.png"
times = []
[times.append(file) for file in os.listdir(path) if re.match(file_re, file)]
if times:
digits = [re.findall("\d{12}", timestamp) for timestamp in times]
timestamp = sorted(digits, reverse=True)[0][0]
return timestamp
它工作正常,但是遍历由顺序正则表达式返回的列表中的列表所需的双 [0][0] 弹出有点令人反感,总体而言,这一切似乎有点生硬。此外,尽管虚拟形象实际上分布在许多目录中(由 user_id 自动生成,但这在这里并不重要),但我觉得如果目录非常大,暴力正则表达式搜索可能会影响性能。
我很想知道这个问题的最佳和惯用的解决方案是什么?它是生成器的候选者还是某种形式的惰性评估?