Python拆分数据并创建变量/内容列表(变量名+数据)

时间:2017-03-07 20:50:40

标签: python python-2.6

我想将一个字符串拆分成多个数据字段,并使用相同的拆分分隔符。

data = ",0101,0202,03car,04bird"
print data.split(',')

然后我想从每个字段创建一个变量或列表。 例如:

print string[01] 
result: 01
print string[02]
result: 02
print string[03]
result: car
print string[04]
result: bird

数据可能会以不同的顺序出现......

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

我尝试了一些不同的想法,我可以做一个8变量脚本,但数据可能包含50到200个字段。

3 个答案:

答案 0 :(得分:0)

这样的事情?

d={}
for item in data.split(','):
    if not item:
        continue
    l = list(item)
    d[''.join(l[0:2])]=''.join(l[2:])

如果你对d使用defaultdict,你也可以丢失密钥

这种方法的问题是,如果“密钥”不是2位/字母

,它将失败

答案 1 :(得分:0)

您可以使用正则表达式:

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 - 

答案 2 :(得分:0)

经过一些测试后,Apero(tnx)的脚本工作率为99.9% 我将正则表达式更改为&#34; pat = re.compile(r&#39; ^(\ w {2})(。+)$&#39;)&#34; 所以,如果我这样做:

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

你可以看到匹配0404,0505,0606等的所有reg.ex都不匹配正确。 如果数据= 04004,05005等,它的工作。

是否有任何工作reg.ex的提示 我的愿望是:

"data = ",03Y,0404,05005,0606,0A0A"
       01 = 
       03 = Y
       04 = 04
       0A = 0A