2013-02-21 89 views
0

我是初学者。我想编写一个脚本来从其文件夹中清理旧的Google Chrome应用程序版本,我想知道如何以有效的方式“排序”应用程序版本号。什么是最好的方法来做到这一点?排序应用程序版本号

这里我的 “春季大扫除” 脚本:

import os 
import sys 
import re 
import operator 
import shutil 


GOOGLE_CHROME_APPLICATION_VERSIONS_DIRECTORY=r'C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\Application' 

REGEX_GOOGLE_CHROME_APPLICATION_VERSION = '^(\d+)\.(\d+)\.(\d+)\.(\d+)$' 


def sorted_by_version_number(versions_list): 
    version_elements = len(versions_list[0]) 
    for index in range(version_elements-1, 0, -1): 
    key = operator.itemgetter(index) 
    versions_list.sort(key=key, reverse = True) 
    return versions_list 


def delete_old_google_chrome_versions(): 
    REGEX = re.compile(REGEX_GOOGLE_CHROME_APPLICATION_VERSION) 
    application_versions = [] 
    for filename in os.listdir(GOOGLE_CHROME_APPLICATION_VERSIONS_DIRECTORY): 
    filepath = os.path.join(GOOGLE_CHROME_APPLICATION_VERSIONS_DIRECTORY, 
          filename) 
    if os.path.isdir(filepath): 
     match = REGEX.match(filename) 
     if match: 
     version = (v1, v2, v3, v4) = [int(match.group(i)) for i in range(1, 5)] 
     application_versions.append(version) 
    versions_to_delete = sorted_by_version_number(application_versions)[1:] 
    for application_version in versions_to_delete: 
    directory_name = '.'.join([str(v) for v in application_version]) 
    directory_path = os.path.join(GOOGLE_CHROME_APPLICATION_VERSIONS_DIRECTORY, 
            directory_name) 
    print('Deleting Google Chrome application directory: {}...'.format(
     directory_path)) 
    # shutil.rmtree(directory_path) 


def main(): 
    delete_old_google_chrome_versions() 


if __name__ == '__main__': 
    main() 

可选的,怎么会这样脚本加以改进?任何建议都会有帮助,因为我在Python中毫无用处。

回答

0

我回答这个问题直接转换成Python:

How to compare software version number using js? (only number)

您可以使用此比较算法对列表进行排序。

+0

我的直觉是我将稳定的虚线字符串值从最不重要到最重要的值视为int值,比作为典型“集合”的辅助方法多次运行“Comparator”函数更有效率排序? (例如某些类型的Quicksort,其他类型的Mergesort等) – Robottinosino 2013-02-21 13:37:55

+0

如果您知道该号码有多少部分,则可以将它们转换为可比较的值。但是除非你做了成千上万的事情,否则这一切都没有太大的影响。计算机是为计算事物而制造的! – Joe 2013-02-21 13:54:44

+0

我是一名只接受高中教育的初学者。我将计算机科学作为一种业余爱好,我永远不会找到工作。既然这是为了好玩,我想学会做对。我真的不喜欢这样的想法:“如果我可以锻炼我的大脑并在那里找到解决方案,或者从其他用户那里学习,只是因为计算机可以做浪费的计算。”“快”:) – Robottinosino 2013-02-21 13:59:22