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
我想用相同的分割分隔符将一个字符串分割成多个数据字段。
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