Python拆分数据并创建变量/内容列表(变量名和数据)
我希望使用相同的拆分分隔符将字符串拆分为多个数据字段Python拆分数据并创建变量/内容列表(变量名和数据),python,python-2.6,Python,Python 2.6,我希望使用相同的拆分分隔符将字符串拆分为多个数据字段 data = ",0101,0202,03car,04bird" print data.split(',') 然后我想从每个字段创建一个变量或列表。 例如: 数据可能以不同的顺序出现 data = ",03box,08train" 我需要做一个小循环来打印 #NumberOfField = int(len(re.findall(',[0-9]+[0-9]', data))) loop = 1 #loop start end = 8 #l
data = ",0101,0202,03car,04bird"
print data.split(',')
然后我想从每个字段创建一个变量或列表。
例如:
数据可能以不同的顺序出现
data = ",03box,08train"
我需要做一个小循环来打印
#NumberOfField = int(len(re.findall(',[0-9]+[0-9]', data)))
loop = 1 #loop start
end = 8 #loop ends
while loop <= end: #a loop for x times
stringvalue = loop.zfill(2) #to allways get 2 numbers in a string, example 01
print stringvalue+" - "+string[stringvalue]
wanted result:
01 -
02 -
03 - box
04 -
05 -
06 -
07 -
08 - train
#numberofield=int(len(关于findall(',[0-9]+[0-9]',数据)))
循环=1#循环开始
结束=8#循环结束
而loop是这样的吗
d={}
for item in data.split(','):
if not item:
continue
l = list(item)
d[''.join(l[0:2])]=''.join(l[2:])
如果对d使用defaultdict,也可能会丢失密钥
这种方法的问题是,如果“键”不是2位数字/字母,它将失败。您可以使用正则表达式:
import re
data = ",0101,0202,03car,04bird"
pat = re.compile(r'^(\d{2})(?!.*\1$)(.+)$')
res = {}
for s in data.split(','):
matches = re.findall(pat, s)
if len(matches) == 1:
k, v = matches[0]
res[k] = v
for i in range(1, 9):
k = str(i).zfill(2)
print k, '-', res.get(k, '')
for i in range(1, 9):
k = str(i).zfill(2)
print k, '-', res.get(k, '')
输出:
01 -
02 -
03 - car
04 - bird
05 -
06 -
07 -
08 -
因此,经过一些测试,来自Apero(tnx)的脚本可以工作99.9%
我将正则表达式更改为“pat=re.compile(r'^(\w{2})(.+)$)”
因此,如果我做了一个:
data = ",03Y,04004,05005,0606,0A0A"
print '04 = '+res.get('04', '')
print '0A = '+res.get('0A', '')
我得到:
01 =
03 = Y
04 = 004
0A = 00A
现在唯一的问题是
if data = "data = ",03Y,0404,05005,0606,0A00A"
0404 and not 04004
the output is:
01 =
03 = Y
04 =
0A = 00A
如您所见,匹配0404050606等的所有reg.ex都不正确匹配。
如果数据=04004、05005等,则其工作正常
对于一个在职的注册医生有什么建议吗
我的愿望是:
"data = ",03Y,0404,05005,0606,0A0A"
01 =
03 = Y
04 = 04
0A = 0A
你的问题是什么?现在测试。。。。我能像预期的那样把它分开。。是否可以将其存储到字符串/变量/列表中?所以我可以稍后使用“print string[03]”显示值?wee,tnx,我测试了它,这是coool。这么多人能用十六进制吗?或者也可以将2个字符作为2个第一个符号。?例如:“,01car,FFbird”我只是改进了我的答案。关于您的问题,只需将(\d{2})替换为您想要匹配的任何条件。tnx,Apero,您的第一个ide工作得非常出色。。。我在使用十六进制时遇到问题。也许这是个问题?所以如果“data=”,03blurp,FFbird“,我想得到输出:“03-blurp+FF-bird”。(我看到了\d{2},但我不知道该使用什么语法:-)也许输出欺骗了我:-)我将正则表达式改为(r'^(\d{2})([a-zA-Z])(?!.\1$)(.+)$)reg.ex是可以的。。python脚本错误。。现在它开始工作了。
"data = ",03Y,0404,05005,0606,0A0A"
01 =
03 = Y
04 = 04
0A = 0A