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

Aestheteの回答に基づいて、他のものよりも少しカスタマイズできるため、次のことができます。

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

また、元のバージョン文字列に分離された要素numsが含まれます。これは、私の例の の代わりに の.ように、バージョン番号が 1 文字よりも大きい場合に便利です。1303

于 2013-06-18T19:32:13.863 に答える
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 に答える