Salut, j'ai la liste des fichiers json dans un dossier.

['user_sample_v001.json', 'user_sample_v002.json', 'user_sample_v105.json']

Donc pythoniquement j'essaye d'obtenir la dernière version

>>> for item in lst:
...  print os.path.splitext(item.split("_")[-1])[0]

v001
v002
v105

Me donne une liste de nombres comme ceci :

>>> for version in versions:
...  number = ""
...  for num in version:
...   if num.isdigit():
...    number = "{0}{1}".format(number, num)
...  nums.append(number)
... 
>>> nums
['001', '002', '105']

Alors je peux faire max(nums) me donne '105'

Alors je peux vérifier comme ceci:

for user_sample in lst:
    if max_num in user_sample:
        print user_sample

Cela me donne 'user_sample_v105.json' peut-il être encore plus optimisé pour la précision et les performances ?

3
Chang Zhao 29 oct. 2020 à 20:36

1 réponse

Meilleure réponse

Vous pouvez utiliser la fonction max() avec la fonction personnalisée key= :

import re

lst = ['user_sample_v001.json', 'user_sample_v002.json', 'user_sample_v105.json']

pattern = re.compile(r'_v(\d+)\.json')

m = max(lst, key=lambda k: int(pattern.search(k).group(1)))
print(m)

Tirages:

user_sample_v105.json
3
Andrej Kesely 29 oct. 2020 à 17:39