我有一个通过FTP连接到网站的Python脚本,并列出了网站上当前版本的程序编号。我创建了一个数组来保存版本号,直到脚本从数组中选出最大数字并告诉我它是什么。例如,我的数组通常如下所示:
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
答案 0 :(得分:3)
编辑抱歉,首先误解了问题 - 有关比较版本号的一些方法,请参阅this answer。在那里采取第二个答案(建议使用distutils.version
的{{1}}),你可以试试这个:
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'
然后您可以按预期使用max:
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]
答案 1 :(得分:1)
您需要连续比较主要版本,然后是次要版本。 Max函数通过将字符串转换为主要和次要版本的元组来接受可用于修改可比较的键参数
>>> max(array, key = lambda e: map(int, e.split(".")))
'1.14'
答案 2 :(得分:0)
您可以使用一个列表,其中每个程序版本将存储为另一个列表,如下所示:
list = [[1,14],[1,6],[1,4]]
其中每个版本的componnent都是内部列表的一部分。
然后你可以这样排序:
sortedlist = sorted(sorted(sorted(list, key=lambda x: x[2]), key=lambda x: x[1]),key=lambda x: x[0])
答案 3 :(得分:0)
在版本号中,您必须播放不同的分割数字,然后先通过mayor_version和minor_version进行比较。
我很确定这次有人解决了......
谷歌搜索后...
是!! Python家伙的确如此。检查一下:
http://pydoc.org/get.cgi/usr/local/lib/python2.5/distutils/version.py