繁体   English   中英

在逗号x和逗号y之间定义字符串,使用逗号分割所有字节

[英]Define string between comma x and comma y the split all bytes using a comma

我要解析的一些数据采用以下格式:

8344,5354,Binh Duong,1,0103313333333033133331,1,13333333331,1,00313330133
,8344,7633,TT Ha Noi,2,3330333113333303111303,3,33133331133,2,30333133010
....more data.....

第一条记录不是以逗号开头,但随后的所有数据行都以逗号开头。 我想将第一行的第4和第5个逗号之间以及所有其他行的第5和第6个逗号之间的所有数字都用逗号分隔此字符串。

因此,在上面的示例中,“ 0103313333333033133331”应打印为“ 0,1,0,3,3,1,3,3,3,3,3,3,3,3,0,3,3,1,3,3, 3,3,1' 。 困难在于,逗号x和y之间的字符串长度根据我要解析的数据而变化。 我已经使用正则表达式来隔离有问题的字符串,只要其中包含16位数字即可,但是并不是我要解析的所有项目都属于这种情况。

结果是,使用带有16个“ {}”实例的.format()方法,在字符串长度不足16个字节的项目上引发了元组索引错误。

谁能建议一种实现我想要的方法?

谢谢

我将使用str.split()获得正确的字段,并使用str.join()将其拆分为单个字符:

with open('xx.in') as input_file:
   for line in input_file:
       line = line.strip().strip(',')
       line = line.split(',')
       field = line[4]
       print ','.join(field)

您可以使用此正则表达式:

^,?\d+,\d+,[\w\s]+,\d+,(\d+)

工作演示

MATCH 1
1.  [23-45] `0103313333333033133331`
MATCH 2
1.  [97-119]    `3330333113333303111303`

然后,您可以使用\\d拆分每个组的内容

p = re.compile(ur'(\d)')
test_str = u"0103313333333033133331"
subst = u"\1,"

result = re.sub(p, subst, test_str)

>> 0,1,0,3,3,1,3,3,3,3,3,3,3,0,3,3,1,3,3,3,3,1,

使用正则表达式的方法略有不同,它从末尾抓取逗号分隔行的第5个元素:

>>> import re
>>> lines = ['8344,5354,Binh Duong,1,0103313333333033133331,1,13333333331,1,00313330133',',8344,7633,TT Ha Noi,2,3330333113333303111303,3,33133331133,2,30333133010']
>>> for line in lines:
...     num = re.search(r'\d+(?=(?:,[^,]+){4}$)', line).group()
...     seq = ','.join(list(num))
...     print(seq)
...
0,1,0,3,3,1,3,3,3,3,3,3,3,0,3,3,1,3,3,3,3,1
3,3,3,0,3,3,3,1,1,3,3,3,3,3,0,3,1,1,1,3,0,3

暂无
暂无

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

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