Skip to main content
 首页 » 编程设计

python之在空行中重复数据,直到出现非空行

2025年05月04日9jyk

我有一个如下所示的数据文件:

 xyz123            2.000    -0.3974     0.0  hij123        
                                          6.0  lmn123       
                                          8.7  efg123       
                                         13.9  uvw123       
                                         28.5  rst123        
 abc123            10.000     0.1943     0.0  wxy123        
                                         10.7  xyz123        
                                         19.9  pqr123      
                                         20.6  stu123       
                                         20.6  klm123       
 def123            50.000    -0.2595    19.2  jkl123       
                                         26.1  stu123       
                                         27.1  def123      
                                         27.1  ghi123      
                                         27.6  abc123 

* uvw123 15.000 -0.3635

 lmn123            40.000    -0.3695     19.2  jkl123       
                                         26.1  stu123       
                                         27.1  def123      
                                         27.1  ghi123      
                                         27.6  abc123 

我需要将它转换成:

xyz123,2.000,-0.3974,0.0,hij123        
xyz123,2.000,-0.3974,6.0,lmn123       
xyz123,2.000,-0.3974,8.7,efg123       
xyz123,2.000,-0.3974,13.9,uvw123       
xyz123,2.000,-0.3974,28.5,rst123        
abc123,10.000,0.1943,0.0,wxy123        
abc123,10.000,0.1943,10.7,xyz123        
abc123,10.000,0.1943,19.9,pqr123      
abc123,10.000,0.1943,20.6,stu123       
abc123,10.000,0.1943,20.6,klm123       
def123,50.000,-0.2595,19.2,jkl123       
def123,50.000,-0.2595,26.1,stu123       
def123,50.000,-0.2595,27.1,def123      
def123,50.000,-0.2595,27.1,ghi123      
def123,50.000,-0.2595,27.6,abc123 

* uvw123,15.000,-0.3635,

lmn123,40.000,-0.3695,19.2,jkl123       
lmn123,40.000,-0.3695,26.1,stu123       
lmn123,40.000,-0.3695,27.1,def123      
lmn123,40.000,-0.3695,27.1,ghi123      
lmn123,40.000,-0.3695,27.6,abc123 

我如何使用 Python、AWK 或 sed 来做到这一点?

更新:因此,如果您注意到输入数据中有一行看起来像“uvw123 15.000 -0.3635”,当我使用来自 aix 的 python 代码时,该行会被弄乱。有没有办法修改您的代码并正确输出行,例如我显示的行?

请您参考如下方法:

这是一个 Python 解决方案:

import re 
 
with open('data.txt') as f: 
  prev = [] 
  for line in f: 
    tok = [t for t in re.split(r'\s+', line.rstrip()) if t] 
    if len(tok) < len(prev): 
      tok = prev[:-len(tok)] + tok 
    print ','.join(tok) 
    prev = tok 

它跟踪每列的最新值(在 prev 中)并使用它来填充当前行中缺失的列。