Karşılaştırmak için nasıl "sürüm-style" dizeleri
Yumurta bu Deyim (sys.o yumurta eklemek için içeren bir dizin yürüyorum yolu). Aynı iki sürümü varsa .bu dizin içinde yumurta, sadece son bir tane eklemek istiyorum.
Adı ayıklamak için basit bir düzenli ifade (r"^(?P<eggName>\w )-(?P<eggVersion>[\d\.] )-. \.egg$
) oluşturun ve yumurtayı sürümü var. Fikir bir sözlük bilgileri tutmak ve tüm dizin yürüdü edildikten sonra, yalnızca en yüksek sürüm eklenmesi yumurta. Parça/dizin eklemek için dosyaları tutmak, sorun değil. Sorun gibi bir dize olan sürüm numarası, karşılaştırma... "2.3.1".
Dizeleri karşılaştırma olduğum için, bu olur:
>>> "2.3.1" > "10.1.1"
True
Ama sürüm 2 Sürüm 10 veya daha yüksek bir sürüm değil.
Biliyorum ben her zaman başlangıç yapıyorum bölme, ayrıştırma, döküm int, vesaire vesaire... Ve ben ... ve eninde sonunda bir çözüm ama... olmalı temizleyici daha etkili (ve zarif) bir şekilde karşılaştırma bu. Orada mı? Bu, not Java... bu tür işlere zarif bir yolu var... Değil mi Python mu?
Ayrıca, tüm bu amaç, belki de tamamen farklı bir yaklaşım... yumurta falan kullanarak gidebilirim yani bu Deyim için doğru yumurta ekleyerekişleyicipaket? Cevaplar böyle de açığız.
Şimdiden teşekkür ederim.
CEVAP
distutils.version
kullanın.
>>> from distutils.version import LooseVersion, StrictVersion
>>> LooseVersion("2.3.1") < LooseVersion("10.1.2")
True
>>> StrictVersion("2.3.1") < StrictVersion("10.1.2")
True
>>> StrictVersion("1.3.a4")
Traceback (most recent call last):
...
ValueError: invalid version number '1.3.a4'
LooseVersion
StrictVersion
PEP 386 altında bırakılmıştır ve bir noktada NormalizedVersion
ile değiştirilecektir unutmayın.
Python belgeleri boş olarak, burada ilgili docstrings (Python 3.3 dayalı) başvuru (the source kesmiş) için:
Her sürüm numarası sınıf aşağıdaki arabirimini uygular:
- 'ayrıştırma' yöntemi bir dize alır ve bazı iç için ayrıştırır eğer dize geçersiz sürüm numarası ise temsili;, ''
ValueError
bir özel durum oluşturur . ayrıştırma- sınıf yapıcısı bir isteğe bağlı dize bir argüman alır, eğer birlikte geçirilen '' . ayrıştırma
__str__
geçirilen dize '(ya da' ayrıştırma için yeniden yapılandırır eşdeğer dize bir ıe. bir eşdeğer oluşturur sürüm numarası örneği)__repr__
Python kod sürüm numarası örneğini yeniden oluşturur_cmp
ya da başka bir örnek ile geçerli örnek karşılaştırır aynı sınıf veya bir dize bir örnek çözümlü gerekir ki aynı sınıfın, böylece aynı kuralları takip etmelidir
StrictVersion
Sürüm anal retentives ve yazılım idealistler için numaralandırma. Sınıfları sürümü için arayüz numarasını uygular yukarıda açıklanan. Sürüm numarası iki veya üç oluşur nokta ile ayrılmış sayısal bileşenleri, "yayın öncesi" etiketi isteğe bağlı ucunda. Ön sürüm etiketi 'a' veya 'b'harfi oluşur bir dizi izledi. İki bileşenleri sayısal sürüm sayılar eşit, pre-release etiketi ile biri olacak her zaman (küçük), biri olmadan daha önceki sayılacaktır.
Aşağıdaki geçerli sürüm numaraları (sırayla gösteriyor verilen cmp fonksiyonu) göre sıralama ile elde edilen olacaktır:
0.4 0.4.0 (these two are equivalent) 0.4.1 0.5a1 0.5b3 0.5 0.9.6 1.0 1.0.4a3 1.0.4b1 1.0.4
Aşağıdaki geçersiz sürüm numaralarını bir örnektir:
1 2.7.2.2 1.3.a4 1.3pl1 1.3c4
Bu sürüm numaralandırma sistemi için gerekçe açıklanacaktır distutils belgelerinde.
LooseVersion
Sürüm anarşistler ve yazılım realistler için numaralandırma. Sınıfları sürümü için arayüz numarasını uygular yukarıda açıklanan. Sürüm numarası numaraları bir dizi,oluşur harf ya da bir nokta veya dizeleri ile ayrılmış. Karşılaştırırken sürüm karşılaştırılır numaraları, sayısal ve alfabetik lexically bileşenleri. Aşağıdaki geçerli sürüm numaraları, özel bir sırada
1.5.1 1.5.2b2 161 3.10a 8.02 3.4j 1996.07.12 3.2.pl0 3.1.1.6 2g6 11g 0.960923 2.2beta29 1.13 5.5.kw 2.0b1pl0
Aslında, geçersiz bir sürüm numarası altında diye bir şey yok bu plan; karşılaştırma için kurallar basit ve tahmin edilebilir, her zaman istediğiniz sonuçlar (bazı tanım için vermeyebilir ama "") istiyor.
Nasıl Unicode karakterleri " karşı...
Bir dize kontrol etmek için nasıl &quo...
Çözmek için nasıl "Eklenti yürütm...
Hatayı düzeltmek için nasıl "Günc...
Nasıl Java "X dakika x saniye&quo...