|
本帖最后由 junyee 于 2021-11-23 17:24 编辑
大家好,我是一个新手python 玩家.
有一串数据,如:
T01
[[
X000906Y009567
X000906Y009075
]]M02
M02X0Y017569
M02X013228Y-017569
M02X-13228Y0
END
我想让python程序逐行解析。
碰到 "[[ ... ]]" 的块则临时存储到一个块中,
遇到 M02X#Y# 后再对块存储的数据进行 加运算。
期待的运行后结果(请忽略 注释##//):
T01
X000906Y009567
X000906Y009075
##// X+=0 , Y+=17569
X000906Y27136
X000906Y26644
##// X+=13228,Y-=17569
X14134Y9567
X14134Y9075
##// X+=-13228 Y+=0
X906Y9567
X906Y9075
END
我试着用一段简单的python脚本来处理它,但是得到的结果与预期的不同。
- #! python3
- ##coding:utf-8
- import re
- input='''
- T01
- [[
- X000906Y009567
- X000906Y009075
- ]]
- M02
- M02X0Y017569
- M02X013228Y-017569
- M02X-13228Y0
- END
- '''
- drils={}
- drils["lines"]=input.split('\n')
- def parse_line(l):
- xy = ('X' in l) or ('Y' in l)
- if (xy==False): return {"name":l};
- match=re.search( r'([^XY]*)X?([\d\-]*)Y?([\d\-]*)' , l )
- name= match.group(1) or ""
- x= match.group(2) or 0
- y= match.group(3) or 0
- x= int(x)
- y= int(y)
- return {"name":name,"x": x,"y": y}
- cat=None
- pattern=[]
- codes=[]
- for l in drils["lines"]:
- if ( cat==True ) :
- if (l=="]]"): ##END_OF_PATTERN
- cat = None
- print('.. quit cat \n')
- continue
- pattern.append( parse_line(l) )
- continue
- if (l=="[["):
- print('enter cat ..')
- ##pattern.clear()
- cat=True
- continue
- if (l.startswith("M02")): ##CALC_PATTERN
- if (l=="M02"):
- xy={"x":0,"y":0}
- else:
- xy=parse_line(l)
- print(" calc_pattern: ", l )
- for i,v in enumerate(pattern):
- pattern[i]["x"] += xy["x"]
- pattern[i]["y"] += xy["y"]
- codes.extend( pattern) ##
- continue
- ## !!! ELSE
- xy =parse_line(l)
- codes.append( xy )
- ##print( str(codes) )
- for v in codes:
- if v.get("x"):
- print( "%sX%dY%d" % (v["name"],v["x"],v["y"]) )
- else:
- print( "%s" % (v["name"]) )
复制代码
得到的结果是:
得到4组结果 全都是最终结果,我用了好几小时还是没找问题所在,故而到论坛向各位大侠求助
问题定位在
codes.extend( pattern) ########
通过插入 print 调试代码可知 , 两个list( pattern 和 codes )得的数据都是正确的,但将 pattern 附加到 codes 就出了错。
|
|