python中两个字符串之间的数据(字节)切片

2024-05-08 21:09:12 发布

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

我有来自请求正文的字节类型的数据,如下所示:

b'0\x80\x06\t*\x86H\x86\xf7\r\x01\x07\x02\xa0\x800\x80\x02\x01\x011\x0b0\t\x06\x05+\x0e\x03\x02\x1a\x05\x000\x80\x06\t*\x86H\x86\xf7\r\x01\x07\x01\xa0\x80$\x80\x04\x82\x04H<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>\n<key>PayloadContent</key>\n<dict>\n <key>URL</key>\n<string>***</string>\n <key>DeviceAttributes</key>\n<array>\n<string>UDID</string>\n<string>DEVICE_NAME</string>\n <string>VERSION</string>\n<string>PRODUCT</string>\n<string>MAC_ADDRESS_EN0</string>\n <string>IMEI</string>\n <string>ICCID</string>\n </array>\n</dict>\n<key>PayloadOrganization</key>\n<string>Flybuilds</string>\n<key>PayloadDisplayName</key>\n<string>Device Information (UDID)</string>\n<key>PayloadVersion</key>\n<integer>1</integer>\n<key>PayloadUUID</key>\n<string>*****</string>\n<key>PayloadIdentifier</key>\n<string>******</string>\n<key>PayloadDescription</key>\n<string>Knowing the UDID of my iOS device</string>\n<key>PayloadType</key>\n<string>Profile Service</string>\n</dict>\n</plist>\n\x00\x00\x00\x00\x00\x00\xa0\x82\n@0

是否可以提取'<;'之间的数据;?xml版本”和“/plist>;“并用python写入文件。 (我们需要从字节数据中提取xml部分)


1条回答
网友
1楼 · 发布于 2024-05-08 21:09:12

当然,在知道所需内容的开始和结束签名的情况下提取它是可能的

#stream is the variable holding the raw data stream (bytes)
#not repeated here for brevity 
start_signature = b'<?xml'
stop_signature = b'</plist>'
xml_start = stream.find(start_signature)
xml_stop = stream.find(stop_signature) + len(stop_signature)
xml_data = stream[xml_start:xml_stop]

虽然我认为这回答了“如何”找到给定起始和结束的数据这一隐含问题,但此解决方案的缺点是,如果xml发生更改,脚本可能会中断。如果您知道每次数据都是一致的,那么这个问题可能不是问题

如果您能够了解数据中其他字节的含义,那么您可能就能够确定xml的起始位置和长度,而不必知道确切的xml内容

相关问题 更多 >

    热门问题