私はアバターをサポートする 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 によって自動的に生成されますが、ここではそれほど重要ではありません)、ディレクトリが非常に大きい場合、力ずくの正規表現検索によってパフォーマンスが低下する可能性があると思います。
この問題の最適で慣用的な解決策は何か知りたいですか? ジェネレーターまたは何らかの形式の遅延評価の候補ですか?