我正在尝试使用序列号和部件号等解析文件,并将它们分类到一个结构中。我想通过标记标识符来解析这个文件,但是我只需要我的数据结构的实际数字/代码。我需要假设所有的数字/代码都有不同的长度,但是我可以依赖于数字/代码之前的标识符,也取决于每个值之后的结束行。
//Text file with serials and information
Serial: 523524234235
Part Number: MHC-1251-A
Manufacturer: KNL-ETA
Serial: 523524281238
Part Number: QLC-851
Manufacturer: MHQ-MCE
.
.
.
答案 0 :(得分:3)
在每一行上,您可以应用正则表达式来提取所需的部分,如下所示:
>>> import re
>>> text = "Serial: 523524234235"
>>> m = re.search(r'Serial: (\d+)', text)
>>> m.group(1)
'523524234235'
你也可以使用split来获得每一行中的两个部分,然后检查第一部分以查看它是什么类型的标记,它是Serial,Part Number等。
你的正则表达式需要一些改进。
m = re.search(r'Serial: (\d+)', text) ==> ` m = re.search(r'Serial:[\s]*(\d+)[\s]*', text)`
答案 1 :(得分:2)
打开文件和readlines并迭代并按':'拆分以获取您的号码。如果值不是逐行的,则可以使用正则表达式。
答案 2 :(得分:1)
我同意@loki;从你所说的,正则表达式的使用是没有必要的。从像您这样的文件中提取的适当结构可能设置为:
parts={} # data structure
entry={} # single set
for line in open('file.dat', 'r'):
flds = [fld.strip() for fld in line.split(':')[:2]]
if len(flds) > 1:
k,v = flds
if k == 'Serial': # use serial number as key vor corresponding entry
entry = {}
parts[v] = entry
else:
entry[k] = v # save information in data set
结果:
{'523524234235': {'Part Number': 'MHC-1251-A', 'Manufacturer': 'KNL-ETA'}, '523524281238': {'Part Number': 'QLC-851', 'Manufacturer': 'MHQ-MCE'}, ...}