比较 python 中不兼容的 PEP440 版本

问题描述 投票:0回答:0

在我的数据框中,我有一些不符合 PEP440 的版本集(尽管其中一些可以被

packaging.Version
解析)。数据框看起来像这样(我已经列出了大多数不符合 PEP440 正则表达式的格式)。版本很奇怪,因为这是实时抓取的 API 数据。

id  api_spec_id      info_version      
473 583              1.0.2-SNAPSHOT     
474 583              1.0.5-SNAPSHOT     
475 580              v1alpha2          
476 580              v1beta            
477 580              v1dev3            
479 581              0.9.0-dev          
480 581              2.0.0-alpha7      
481 581              0.0.2-beta        
482 581              3.0.0_tag                  
480 585              2016-12-01         
481 585              2017-01-03                
479 586              1.PreR15.0.0       
481 587              stable            
482 588              2020-08-20T12:57:36Z   
479 589              beta               
480 589              datatransfer_v1    
481 590              1.0.0-oas3         
482 590              1.0.1-oas3        

我想对数字和标签进行基本比较,并检查每个标签的版本升级,例如,如果我们有

v1.2.3
<
v1.3.0
-这应该在
minor

我们有

x.y
x.y.z
x.y.z.p
版本格式,有时他们有
tags
alpha
beta
rc
等标签可以简单地标记为
pre
。因此,如果在两个版本之间,假设
1.2.3
1.3.4
minor
patch
发生了变化,因此它被标记为
minor.patch
。部分规则如下(
p
代表微观,
x.y.z
major.minor.patch
):

  • x.y
    变化:
    major.minor
  • y.z
    变化:
    minor.patch
  • x.z
    变化:
    major.patch
  • x.p
    变化:
    major.micro
    以及所有其他情况的类似命名。

我不确定输出结果,因为我从来没有在

major.minor.patch
方案之外进行过比较,但或多或少我希望输出类似于这样:

id  api_spec_id      info_version       label
473 583              1.0.2-SNAPSHOT     -
474 583              1.0.5-SNAPSHOT     patch.snapshot
475 580              v1alpha2           pre
476 580              v1beta             pre
477 580              v1dev3             pre
479 581              0.9.0-dev          -
480 581              2.0.0-alpha7       pre
481 581              0.0.2-beta         pre
482 581              3.0.0_tag          major         
480 585              2016-12-01         -
481 585              2017-01-03         major.minor.patch        
479 586              1.PreR15.0.0       epoch(for unknown versioning)
481 587              stable             epoch
482 588              2020-08-20T12:57:36Z   epoch
479 589              beta               alphabet(if only letters found)
480 589              datatransfer_v1    epoch
481 590              1.0.0-oas3         -
482 590              1.0.1-oas3         patch

如果正则表达式在这种情况下可以工作,我会被卡住,因为它可能会变得有点复杂或正则表达式和

packaging.Version
的组合(因为一些版本被解析为所需的格式并且可以与
major.minor.patch
进行比较) .另一种选择是
split
并在版本之间进行比较。

我最初的想法是将版本更改为可解析的格式,但是这在我的分析中引入了偏差,因为许多其他标签都被忽略了,导致一个特定标签的结果更可取(例如

major.minor
)。

如有任何帮助,我们将不胜感激!我必须补充一点,我以前从未处理过这种代码,我会尝试提供我所拥有的任何信息(如果需要更多信息),但是弄清楚这段代码的

logic
,是我需要的建议。

python pandas versioning semantic-versioning
© www.soinside.com 2019 - 2024. All rights reserved.