繁体   English   中英

将单行数据分解为多行数据

[英]Breaking single line data to multi-line data

处理项目,我给出了原始日志数据并需要将其解析为可读状态,知道使用python来中断所有未成功的部分,然后留下需要拆分和格式化的原始数据,但是无法弄清楚如果他们将多条记录放在同一行上,这是一种将其分开的方法,这种情况并不总是会发生。

这是我到目前为止得到的字符串值。

* 190205 * 12,6000,0000000,12,6000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000 * 190206 * 01,2050,0100550,01,4999,0000000 ,,

我需要将它分开,以便每一行都以数字值开头,但是因为我可以假设只有1或2个我不能想到这样做的方法,以及之后的其他逗号分隔值的数量它变化,所以我不能长度。 这是我想要使用的将进一步操作上述示例中的数据。

* 190205 * 12,6000,0000000,12,6000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000

* 190206 * 01,2050,0100550,01,4999,0000000 ,,

txt = "*190205*12,6000,0000000,12,6000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000*190206*01,2050,0100550,01,4999,0000000,,"

output = list()
i = 0
x = txt.split("*")
while i < len(x):
    if len(x[i]) == 0:
        i += 1
        continue
    print ("*{0}*{1}".format(x[i],x[i+1]))
    output.append("*{0}*{1}".format(x[i],x[i+1]))
    i += 2
  • 使用split to tokezine *之间的单词
  • 打印两个构成标记

你可以使用正则表达式:

([*][0-9]*[*])

您可以使用此捕获标题部分,然后根据它进行拆分。

与@mujiga相同的答案,但我虽然dict可能更适合进一步的操作

txt = "*190205*12,6000,0000000,12,6000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000*190206*01,2050,0100550,01,4999,0000000,,"


datadict=dict()
i=0
x=txt.split("*")
while i < len(x):
    if len(x[i]) == 0:
        i += 1
        continue
    datadict[x[i]]=x[i+1]
    i += 2

除了@Ali Nuri Seker提出的使用正则表达式的建议外,这是一个缺少环顾四周的简单方法(在这种情况下,实际上可能会造成伤害)

>>> import re

>>> string = '''*190205*12,6000,0000000,12,6000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000*190206*01,2050,0100550,01,4999,0000000,,'''

>>> print(re.sub(r'([\*][0-9,]+[\*]+[0-9,]+)', r'\n\1', string))

#Output 
*190205*12,6000,0000000,12,6000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000,13,2590,0000000,13,7000,0000000,13,7000,0000000   
*190206*01,2050,0100550,01,4999,0000000,,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM