SORU
9 AĞUSTOS 2012, PERŞEMBE


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
9 AĞUSTOS 2012, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dan Gately

    Dan Gately

    13 AĞUSTOS 2006
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • The Dubstep FX

    The Dubstep

    5 Mart 2011