Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python以编程方式解析复杂字符串_Python_Parsing_Split - Fatal编程技术网

Python以编程方式解析复杂字符串

Python以编程方式解析复杂字符串,python,parsing,split,Python,Parsing,Split,我不确定这是否可以通过编程实现。我已经尝试了在SO上找到的各种例子,但专家可能会看一看,然后很快说“别浪费时间” 有点老套的解决方案:通过跟踪和错误操作字符串 观察:描述值对由,分隔 那么,让我们试着在这些分线器处拆分线: line=“连接=带连接器的电缆,M12x1外螺纹,4针,0.30 m、 版本=背景灯,尺寸=43 x 9.5 x 64.5 mm,额定工作电压 老化Ue DC=24 V,最大电流消耗=208 mA,工作模式=正常,材料=铝 um阳极氧化,黑色玻璃PMMA,照明面积=25 x

我不确定这是否可以通过编程实现。我已经尝试了在SO上找到的各种例子,但专家可能会看一看,然后很快说“别浪费时间”

有点老套的解决方案:通过跟踪和错误操作字符串 观察:描述值对由
分隔

那么,让我们试着在这些分线器处拆分线:

line=“连接=带连接器的电缆,M12x1外螺纹,4针,0.30
m、 版本=背景灯,尺寸=43 x 9.5 x 64.5 mm,额定工作电压
老化Ue DC=24 V,最大电流消耗=208 mA,工作模式=正常,材料=铝
um阳极氧化,黑色玻璃PMMA,照明面积=25 x 25 mm,灯型=LED红色
光,波长=617 nm,照度(0.1 m)=350勒克斯,光束角度=40°x 40°,
环境温度=-10…55°C,认证/一致性=CE;EAC;WEEE,IP等级=IP
54"
行。拆分(“,”)
是否有任何逗号(
)后面没有空格?让我们检查拆分结果是否仍然包含任何逗号:

>>任何(','部分中的部分用于第行中的部分。拆分(','))
假的
好的

观察:描述和值由
=
分隔

让我们检查我们标识的所有零件是否都包含
=

>>所有('='在x中表示x在line.split(','))
假的
嗯。怎么搞的?让我们看看完整的结果:

>line.split(“,”)
['连接=带连接器的电缆',
‘M12x1男性’,
“4针”,
“0.30米”,
“版本=背景光”,
'尺寸=43 x 9.5 x 64.5 mm',
‘额定工作电压Ue DC=24 V’,
“最大电流消耗=208 mA”,
‘工作模式=正常’,
“材料=阳极氧化铝”,
“黑色玻璃聚甲基丙烯酸甲酯”,
“照明面积=25 x 25 mm”,
“灯类型=LED红灯”,
“波长=617纳米”,
‘照度(0.1米)=350勒克斯’,
“光束角度=40°x 40°”,
“环境温度=-10…55℃”,
“批准/符合性=CE;EAC;WEEE”,
“IP等级=IP54”]
Aha:似乎有些值包含

  • 带连接器的电缆,M12x1外螺纹,4针,0.30米
  • 铝阳极氧化,黑色玻璃PMMA
这些也被分开了

让我们简单地重新加入其中:

fake_parts=line.split(','))
实部=[]
对于假冒零件中的零件:
如果部分“=”:
实数部分。附加(部分)
其他:
实部[-1]+=f',{part}'
看起来怎么样

>>真实零件
['连接=带连接器的电缆,M12x1外螺纹,4针,0.30米',
“版本=背景光”,
'尺寸=43 x 9.5 x 64.5 mm',
‘额定工作电压Ue DC=24 V’,
“最大电流消耗=208 mA”,
‘工作模式=正常’,
“材料=铝阳极氧化,黑色玻璃PMMA”,
“照明面积=25 x 25 mm”,
“灯类型=LED红灯”,
“波长=617纳米”,
‘照度(0.1米)=350勒克斯’,
“光束角度=40°x 40°”,
“环境温度=-10…55℃”,
“批准/符合性=CE;EAC;WEEE”,
“IP等级=IP54”]
>>>全部(部分中的“=”表示部分中的真实部分)
真的
好多了

所有部件现在是否只包含一个
=
?让我们试着把它们分开:

>all(len(part.split('='))==2(对于真实零件中的零件)
真的
好。这样,我们就可以组成一本字典:

>>从集合导入订单数据
>>>OrderedDict(零件分割('=')用于实零件中的零件)
订购的DICT([(“连接”,“带连接器的电缆,M12x1插头,4针,0.30米”),
(“版本”、“背景光”),
(‘尺寸’,‘43 x 9.5 x 64.5毫米’,
(‘额定工作电压Ue DC’,‘24 V’),
(“最大电流消耗”,“208 mA”),
(‘工作模式’、‘正常’),
(“材料”,“阳极氧化铝,黑色玻璃PMMA”),
(‘照明面积’,‘25 x 25 mm’),
(“灯型”、“LED红灯”),
(‘波长’,‘617纳米’),
(‘照度(0.1米)’‘350勒克斯’),
(“光束角度”,“40°x 40°”),
(‘环境温度’,‘-10…55°C’),
(“批准/符合性”、“CE;EAC;WEEE”),
(“IP等级”,“IP54”))
或者干脆

>>dict(实际零件中零件的零件分割('='))
{‘环境温度’:‘-10…55°C’,
“批准/符合性”:“CE;EAC;WEEE”,
“光束角度”:“40°x 40°”,
‘连接’:‘带连接器的电缆,M12x1外螺纹,4针,0.30米’,
“电流消耗最大值:”“208 mA”,
“尺寸”:“43 x 9.5 x 64.5毫米”,
‘IP等级’:‘IP54’,
“照明面积”:“25 x 25 mm”,
‘照度(0.1米)’‘350勒克斯’,
“灯光类型”:“LED红灯”,
“材料”:“铝阳极氧化,黑色玻璃PMMA”,
“工作模式”:“正常”,
‘额定工作电压Ue DC’:‘24 V’,
“版本”:“背景光”,
‘波长’:‘617纳米’
现在,这可能是你可以处理的事情。然而,这种方法是脆弱的:

  • 如果某些描述还包含
    ,会发生什么
  • 如果描述或值包含
    =
    ,会发生什么
  • 如果格式包含特定的转义序列,该怎么办
正确的解决方案:使用解析器 要根据一组复杂(或不太复杂)的规则正确解释编码为文本的数据,请使用解析器库。有关选项,请参见例如


但这需要您指定控制编码的确切规则集(称为“语法”),从而也知道这些规则。通过查看编码的数据,这些规则是否以及在多大程度上可以派生出来,取决于这些数据。

如果你能想出一个明确的算法来解析数据,那么你很可能可以编写一个Python程序来做同样的事;在尝试了几个“明确的算法”后,我失败了,尽管我是个新手。一个图案会跳到训练有素的眼睛上吗?我感谢@das-g给它一次机会……它更近了。谢谢你的帮助;看起来我的长数据集太不可靠了。我发现在描述里面有一些“,”