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

Python split data and create variables/list of content (variable name + data)

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

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 个字段。

是这样的吗?

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

如果您对 d 使用 defaultdict,您也可能缺少键

这种方法的问题是,如果 "key" 不是 2 digits/letters

,它将失败

您可以使用正则表达式:

import re

data = ",0101,0202,03car,04bird"
pat = re.compile(r'^(\d{2})(?!.*$)(.+)$')

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

如您所见,所有匹配 0404、0505、0606 等的 reg.ex 均未正确匹配。 如果数据 = 04004、05005 等,它正在工作。

有什么技巧可以工作吗reg.ex 我的愿望是:

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