1

所以说我有一个检索到的目录名称“LibX_00.03”,我检索目录的版本信息:

lib = "LibX_00.03"

version = lib[-5:]

完成此操作后,我想将此版本号与其他版本号进行比较以断言库的最新版本,问题在于必须以数字形式进行比较,而不是 str。转换为 int 或 float 都不起作用,因为 int 会给出一个整数,而 float 会给出一个不准确的转换:

>>> float(version)
0.299999...

那么,我怎样才能准确地保留版本号,同时以我进行比较的形式保存它呢?

4

5 回答 5

2
>>> from distutils.version import StrictVersion
>>> StrictVersion('00.03') > StrictVersion('00.10')
False
>>> StrictVersion('00.03') > StrictVersion('00.02')
True

'1.0b'请注意,如果您有版本字符串,这将不起作用,用于该用途LooseVersion

>>> from distutils.version import LooseVersion
>>> LooseVersion('1.2b') > LooseVersion('0.1')
True
>>> LooseVersion('1.2b') > LooseVersion('1.2c')
False
于 2012-08-22T12:25:18.677 回答
1

看来您知道在结束前总会有 4 个字符的格式。你为什么不尝试这样的事情?

versionnumbers = [int(x) for x in version if x != '.']

现在您可以从最高到最低访问您的版本列表。

versionnumbers[0] # Major
versionnumbers[1] # Minor
...
于 2012-08-22T12:24:47.803 回答
0

您可以使用模块中的Decimal类。decimal

>>> from decimal import Decimal
>>> Decimal('00.03')
Decimal('0.03')
于 2012-08-22T12:23:38.753 回答
0
>>> import decimal
>>> lib = "LibX_00.03"
>>> version=lib[-5:]
>>> dec=decimal.Decimal(version)
>>> dec
Decimal('0.03')

>>> 0.05>dec
False
>>> dec>decimal.Decimal('0.05')
False
>>> dec<decimal.Decimal('0.05')
True
>>> dec==decimal.Decimal('0.03')
True
>>> dec==decimal.Decimal('0.0299999999999999')
False
>>> 
于 2012-08-22T12:30:16.170 回答
0

根据 Aesthete 的回答,我觉得这很好,因为您可以比其他人更多地定制它,您可以执行以下操作:

>>> import re
>>> version = "00.13"
>>> nums = [ int(x) for x in re.split("\.",version) ]
>>> nums
[0, 13]

并将nums包含.原始版本字符串中的分隔元素。如果您的版本号大于一个字符,这很好,例如13在我的示例中,而不是03.

于 2013-06-18T19:32:13.863 回答