确定文件的最新版本(python)

2024-10-01 19:31:04 发布

您现在位置:Python中文网/ 问答频道 /正文

这让我左右为难。。。在

我有一个文件夹里的文件列表。例如

myFiles = ["apple_d_v01.jpg", "apple_d_v02.jpg", "apple_d_v03.jpg", "something_d.jpg", "anotherthing_d.jpg"]

文件“apple_d”有三个版本,使用版本后缀“_vxx”。我希望能够修改列表,使其只有最新版本,以便

^{pr2}$

有什么想法吗?在

非常感谢。在

编辑:今天早上我想到了这个问题,它很好地解决了这个问题,但与我最初提出的问题有些不同。谢谢大家的帮助。在

myFiles = ["apple_d.jpg", "apple_dm.jpg", "apple_d_v2.jpg", "apple_d_v3.jpg", "something_d.jpg", "anotherthing_d.jpg", "test2_s_v01", "test2_s_v02.jpg", "test2_s_v03.jpg", "test2_s_v04.jpg" ]

objVersions = []


obj = "cube"  #controlled by variable
suf = "d"     #controlled by variable
ext = ".jpg"  #controlled by variable

for file in myFiles:


    if obj + "_" + suf + "_" in file:
        objVersions.append(file)

    if obj + "_" + suf + "." in file:
        objVersions.append(file)

objVersions = sorted(objVersions, reverse=True)

for file in objVersions:

    if ext not in file:
        objVersions.remove(file)


chosenfile = objVersions[0]

Tags: 文件in版本objapplebyifvariable
3条回答

假设d是问题中的版本号

latestVersion = max(int(fname.rsplit('.',1)[0].rsplit("_",1)[1].strip('v')) for fname in myFiles)

从您的评论中,我知道您希望保留最新版本的文件。为此,您需要:

^{pr2}$

假设版本始终使用_v##的语法,则可以执行以下操作:

import re

parts_re = re.compile(r'^(.+_d)(.*)\.jpg$')

def remove_oldies(list):
    final = []
    saved_version = ''
    saved_name = ''
    for item in sorted(list):
        name, version = parts_re.search(item).group(1,2)
        if name != saved_name:
            if saved_name != '':
                final.append(saved_name + saved_version + ".jpg")
            saved_version = version
            saved_name = name
        else:
            saved_version = version
    final.append(saved_name + saved_version + ".jpg")
    return final

    remove_oldies(myFiles)

我做的这个方法我想会按照你的要求来做,它获取一个文件名的列表并找到最新的版本,然后搜索包含版本标记的所有文件,并删除那些不是最新的文件。如果某些文件只更新到版本2,而其他文件更新到版本3,则它将不起作用。在

def removePreviousVersions(FileNameList):
    returnList = []
    LatestVersion = 0
    for FileName in FileNameList:
        if FileName.find('_v') > -1:
            Name, Version = (FileName.replace('.jpg', '')).split('_v')
            if LatestVersion <  int(Version):
                LatestVersion = int(Version)

    argument = '_v'+ str(LatestVersion).zfill(2)
    for FileName in FileNameList:
        if FileName.find('_v') == -1:
            returnList.append(FileName)        
        elif FileName.find(argument) != -1:
            returnList.append(FileName)

    return returnList

这里的这个例子使用了一个类似的方法,但是它将获取文件的最新版本,即使它是一个旧版本文件的最新版本。在

^{pr2}$

输入示例:

NameList=[“愚蠢的v01.jpg”,“苹果的v01.jpg”,“苹果的v02.jpg”,“苹果的v03.jpg”,“其他的东西”]

返回[“傻瓜v01.jpg”,“apple\u v03.jpg”,“something\d.jpg”,“anotherthing\u d.jpg”]

相关问题 更多 >

    热门问题