-1

我有一个 Python 脚本,它通过 FTP 连接到一个网站,并列出了该网站上程序的当前版本号。我创建了一个数组来保存版本号,直到脚本从数组中挑选出最大的数字并告诉我它是什么。例如,我的数组通常如下所示:

array = ['1.04','1.6','1.14']

所以我用...

max_in_array = max(array) 

返回数组中的最大值。

不幸的是,我收到的最大数字是“1.6”,而事实上,“1.14”是最新的版本号。我能想到的唯一另一件事就是切断“1”。从数组列表中,以便我收到:

array = ['04','6','14']

然后将其粘贴回去以获取完整的版本号。但由于该网站包含许多版本,例如“2.02.04”和“1.14.01”,我不知道如何有效地做到这一点。

任何帮助将不胜感激!


os.chdir("./gnu/"+_package)

pope = len(_package) + 1 ## Cuts off name of program
char = len(_package) - 12 ## Cuts off extension ".tar.gz"

for tok in glob.glob("*.tar.gz"):
    token.append(tok) ## Appends name to array
    bork = max(token) ## Gets max version number (sometimes useless)
    print bork
    char = len(bork) - 7

for _gnu in glob.glob("*.tar.gz"): ## Finds only matches with .tar.gz
    _gnuapp.append(_gnu[pope:char]) ## Appends version number to array
    spoke = max(_gnuapp) ## Gets max version number
    _ver = _package + "-" + spoke + ".tar.gz" ## Compiles the package name, ver #, and extension
    _down(_user, _ver, _package) ## Opens information in download module 
4

4 回答 4

3

编辑:抱歉,起初误解了这个问题 - 请参阅此答案以了解有关比较版本号的一些方法。在那里取第二个答案(建议使用distutils.version's StrictVersion),你可以试试这个:

In [3]: from distutils.version import StrictVersion

In [4]: s = ['1.04','1.6','1.14', '2.02.04', '1.14.01']

In [5]: max(s, key=StrictVersion)
Out[5]: '2.02.04'

需要注意的一件事是,您实际上是在比较字符串而不是数字。您可以做的一件事是确保您自己比较数字(不管您以后想要对项目做什么)是为max函数提供一个键:

In [1]: s = ['1.04','1.6','1.14']

In [2]: max(s, key=float)
Out[2]: '1.6'

由于您要比较浮点值(而不是字符串),因此这会比较字符串的浮点等效项。但是,最好在继续之前将它们转换为浮点数:

In [4]: s = ['1.04','1.6','1.14']

In [5]: s_floats = [float(x) for x in s]

In [6]: s_floats
Out[7]: [1.04, 1.6000000000000001, 1.1399999999999999]

然后,您可以按预期使用 max :

In [9]: max(s_floats)
Out[9]: 1.6000000000000001
于 2012-12-27T16:45:08.760 回答
1

您需要依次比较主要版本和次要版本。Max 函数接受一个关键参数,您可以使用它来修改可比较的,通过将字符串转换为主要和次要版本的元组

>>> max(array, key = lambda e: map(int, e.split(".")))
'1.14'
于 2012-12-27T17:05:14.113 回答
0

您可以使用一个列表,其中每个程序版本都将存储为另一个列表,如下所示:

列表 = [[1,14],[1,6],[1,4]]

其中每个版本组件都是内部列表的一部分。

然后你可以这样排序:

sortedlist = sorted(sorted(sorted(list, key=lambda x: x[2]), key=lambda x: x[1]),key=lambda x: x[0])
于 2012-12-27T16:49:41.543 回答
0

在版本号中,您必须播放不同的拆分号,然后先按 mayor_version 比较,然后按 minor_version 比较。

我很确定这次有人解决了...

谷歌搜索后...

是的!!确实是 Python 人。检查这个:

http://pydoc.org/get.cgi/usr/local/lib/python2.5/distutils/version.py

于 2012-12-27T17:15:46.070 回答