免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10089 | 回复: 8
打印 上一主题 下一主题

如何用Python比较版本号的大小? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-13 21:40 |只看该作者 |倒序浏览
本帖最后由 shaohao 于 2010-07-13 21:48 编辑

软件的版本号以字符串的形式放置在变量中。
例如:

  1. a = '4.2.3-7.fc13'
  2. b = '4.2.2-18.fc13'
复制代码
想通过比较字符串的方式得到版本号的大小信息。
开始时候直接使用a > b的方式进行比较
但是发现如下情况就失效了:

  1. a = '4.2.10-7.fc13'
  2. b = '4.2.8-7.fc13'
复制代码
于是我考虑使用len(a) > len(b) or a > b的判断。
结果碰到如下方式又失效了:

  1. a = '4.1.10-7.fc13'
  2. b = '4.2.8-7.fc18'
复制代码
晕倒,不知道有没有专门的解决这类问题的库。

由于版本号的数字一般是不带前缀'0'的,曾考虑过分割'.'为多个字段来比较。但是后来发现有些软件的版本号更怪,

  1. a = 'git200908'
复制代码
之类的,根本不遵循一般的软件版本号命名规范。

论坛徽章:
0
2 [报告]
发表于 2010-07-13 22:01 |只看该作者
逐位比啊

论坛徽章:
0
3 [报告]
发表于 2010-07-13 22:41 |只看该作者
具体问题具体分析

论坛徽章:
0
4 [报告]
发表于 2010-07-14 00:51 |只看该作者
这个 版本号  需要自己分析了

论坛徽章:
0
5 [报告]
发表于 2010-07-14 01:01 |只看该作者
  1. re.split('\D*',version)
复制代码
然后直接用>比较。。。应该能解决大部分。。。

论坛徽章:
0
6 [报告]
发表于 2015-10-15 15:54 |只看该作者
Kabie 发表于 2010-07-14 01:01
然后直接用>比较。。。应该能解决大部分。。。


这种方法不完全适用,当如下情况的时候,结果就是错的:
a='1.0.8'
b='1.0.10'
a > b的结果为True

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
7 [报告]
发表于 2015-10-15 17:26 |只看该作者
nono no 有模块的。。

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
8 [报告]
发表于 2015-10-15 17:36 |只看该作者
怎么那么经典的模块 你们都没有用到吗? 我也醉了。。
  1. from distutils.version import LooseVersion

  2. LooseVersion(a) < LooseVersion(b)
复制代码

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
9 [报告]
发表于 2015-10-15 17:39 |只看该作者
本帖最后由 Linux_manne 于 2015-10-15 17:41 编辑

一般在项目中 如果有版本规范 使用StrictVersion
ps.  卧槽。。。 10 年的帖子都被翻出来了。。妈的。。 早知道不回复了。。  你们不要理我...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP