Python字符串pars

2024-07-04 15:44:35 发布

您现在位置:Python中文网/ 问答频道 /正文

Im正在开发一个数据包检索系统,该系统将获取一个包,并基于标签系统(类似于HTML标记)处理数据包的各个部分。 [仅限基于文本的文件,无二进制文件]。在

包的每个部分都包含在两个相同的标记之间,下面是一个示例包:

"<PACKET><HEAD><ID><ID><SEQ><SEQ><FILENAME><FILENAME><HEAD><DATA><DATA><PACKET>"

整个包包含在<PACKET><PACKET>标记中。 所有元数据都包含在<HEAD><HEAD>标记中,包所属的文件名包含在<FILENAME><FILENAME>标记中。在

例如,假设一个包被接收并存储在一个名为sTemp的临时字符串变量中。 例如,如何有效地检索一对标记的内容,例如<FILENAME><FILENAME>标记的内容?在

我希望有这样的功能,比如说getTagFILENAME(packetX),它将返回包的<FILENAME><FILENAME>标记的文本字符串内容。 使用Python是否可以做到这一点?在

如有任何建议或意见。在


Tags: 文件字符串标记文本id内容datapacket
3条回答

像这样?在

import re
def getPacketContent ( code, packetName ):
    match = re.search( '<' + packetName + '>(.*?)<' + packetName + '>', code )
    return match.group( 1 ) if match else ''

# usage
code = "<PACKET><HEAD><ID><ID><SEQ><SEQ><FILENAME><FILENAME><HEAD><DATA><DATA><PACKET>"
print( getPacketContent( code, 'HEAD' ) )
print( getPacketContent( code, 'SEQ' ) )

正如mjv所指出的,如果您只使用XML,那么发明一种类似XML的格式就毫无意义了。在

但是:如果要使用XML作为数据包格式,则必须真正使用XML。您应该使用XML库来创建您的包,而不仅仅是解析它们。否则,当您的某个字段值第一次包含XML标记字符时,您将陷入困境。在

当然,您可以编写自己的代码来进行必要的转义、过滤非法字符、保证格式良好等等。对于这样简单的格式,这可能就是您需要做的全部。但是,沿着这条路走下去是一种学习XML的方法,您可能不想学习这些东西。在

如果使用XML库创建数据包是个问题,那么最好定义一个自定义格式(我定义一个与XML完全不同的格式,以防止人们产生想法),并使用pyparsing为其构建一个解析器。在

如果数据包格式有效地使用了XML格式的语法(例如,如果“结束标记”实际上包含斜杠),则可以使用xml.etree.ElementTree
这个库是Python标准库的一部分,从Py2.5开始。我发现处理这种数据非常方便。它提供了许多读取和修改这种树结构的方法。由于XML语言的通用性和ElementTree库中内置的XML意识,包语法可以很容易地演化,例如支持重复元素、元素属性。在

示例:

>>> import xml.etree.ElementTree
>>> myPacket = '<PACKET><HEAD><ID>123</ID><SEQ>1</SEQ><FILENAME>Test99.txt</FILE
NAME></HEAD><DATA>spam and cheese</DATA></PACKET>'
>>> xt = xml.etree.ElementTree.fromstring(myPacket)
>>> wrk_ele = xt.find('HEAD/FILENAME')
>>> wrk_ele.text
'Test99.txt'
>>>

相关问题 更多 >

    热门问题