我正在用 python 编写一个 Google App Engine Web 应用程序,并使用 iPhone 应用程序 (sqlite) 中的数据库为其提供种子。
我在 3 个字段上遇到了一些困难,这些字段被定义为 blob 字段,并且其中包含二进制序列化对象。 (通常它们以“bplist”开头,所以我假设它是一个二进制序列化属性列表 - 我感兴趣的列表中也包含序列化的 NSMutableArray。)
我怀疑我的两个选择是 a) 看看二进制格式如何适合正则表达式样式地抓取值(它们都是文本) b) 编写一个快速的iOS应用程序,打开数据库,将数据导出为更好的格式
任何其他想法,建议最好的路线,或者(手指交叉)指向某种伟大的 python 蛋,它解决了我所有的问题。
下面我包含了一个示例,并尝试为媒体合理地格式化它 - 从底部我需要提取的是(匿名的实际数据)
street = "1111 Address Ln #2004"
street2 = ""
City = "Dallas"
State = "Tx"
Zip = "75243"
Country = ""
Type = ""
以下是典型条目的数据: http://dl.dropbox.com/u/6649380/serializedobject.txt
"000000ACB 62 70 6C 69 73 74 30 30-D4 01 02 03 04 05 06 09 |bplist00Ô.|"
"000000ADB 0A 58 24 76 65 72 73 69-6F 6E 54 24 74 6F 70 59 |.X$versionT$topY|"
"000000AEB 24 61 72 63 68 69 76 65-72 58 24 6F 62 6A 65 63 |$archiverX$objec|"
"000000AFB 74 73 12 00 01 86 A0 D1-07 08 54 72 6F 6F 74 80 |ts † ÑTroot€|"
"000000B0B 01 5F 10 0F 4E 53 4B 65-79 65 64 41 72 63 68 69 |_NSKeyedArchi|"
"000000B1B 76 65 72 AF 10 12 0B 0C-12 25 26 27 27 28 29 2A |ver¯%&''()*|"
"000000B2B 2B 2C 2D 2E 2F 30 34 3B-3E 55 24 6E 75 6C 6C D2 |+,-./04;>U$nullÒ|"
"000000B3B 0D 0E 0F 10 56 24 63 6C-61 73 73 5A 4E 53 2E 6F |.V$classZNS.o|"
"000000B4B 62 6A 65 63 74 73 80 11-A1 11 80 02 D3 0D 13 0E |bjects€¡€Ó.|"
"000000B5B 14 15 1D 57 4E 53 2E 6B-65 79 73 80 10 A7 16 17 |WNS.keysۤ|"
"000000B6B 18 19 1A 1B 1C 80 03 80-04 80 05 80 06 80 07 80 |€€€€€€|"
"000000B7B 08 80 09 A7 1E 1F 20 21-21 21 24 80 0A 80 0B 80 |€.§ !!!$€.€€|"
"000000B8B 0C 80 0D 80 0D 80 0D 80-0E 54 63 69 74 79 55 73 |€.€.€.€TcityUs|"
"000000B9B 74 61 74 65 53 7A 69 70-57 73 74 72 65 65 74 32 |tateSzipWstreet2|"
"000000BAB 54 74 79 70 65 57 63 6F-75 6E 74 72 79 57 73 74 |TtypeWcountryWst|"
"000000BBB 72 65 65 74 31 56 44 61-6C 6C 61 73 52 54 78 55 |reet1VDallasRTxU|"
"000000BCB 37 35 32 34 33 50 D2 0D-31 32 33 59 4E 53 2E 73 |75243PÒ.123YNS.s|"
"000000BDB 74 72 69 6E 67 80 0F 5F-10 14 31 31 31 31 20 41 |tring€_1111 A|"
"000000BEB 64 64 72 65 73 73 20 4C-6E 20 23 32 30 30 34 D2 |ddress Ln #2004Ò|"
"000000BFB 35 36 37 38 58 24 63 6C-61 73 73 65 73 5A 24 63 |5678X$classesZ$c|"
"000000C0B 6C 61 73 73 6E 61 6D 65-A3 38 39 3A 5F 10 0F 4E |lassname£89:_N|"
"000000C1B 53 4D 75 74 61 62 6C 65-53 74 72 69 6E 67 58 4E |SMutableStringXN|"
"000000C2B 53 53 74 72 69 6E 67 58-4E 53 4F 62 6A 65 63 74 |SStringXNSObject|"
"000000C3B D2 35 36 3C 3D A2 3D 3A-5C 4E 53 44 69 63 74 69 |Ò56<=¢=:\NSDicti|"
"000000C4B 6F 6E 61 72 79 D2 35 36-3F 40 A3 40 41 3A 5E 4E |onaryÒ56?@£@A:^N|"
"000000C5B 53 4D 75 74 61 62 6C 65-41 72 72 61 79 57 4E 53 |SMutableArrayWNS|"
"000000C6B 41 72 72 61 79 00 08 00-11 00 1A 00 1F 00 29 00 |Array ) |"
"000000C7B 32 00 37 00 3A 00 3F 00-41 00 53 00 68 00 6E 00 |2 7 : ? A S h n |"
"000000C8B 73 00 7A 00 85 00 87 00-89 00 8B 00 92 00 9A 00 |s z … ‡ ‰ ‹ ’ š |"
"000000C9B 9C 00 A4 00 A6 00 A8 00-AA 00 AC 00 AE 00 B0 00 |œ ¤ ¦ ¨ ª ¬ ® ° |"
"000000CAB B2 00 BA 00 BC 00 BE 00-C0 00 C2 00 C4 00 C6 00 |² º ¼ ¾ À Â Ä Æ |"
"000000CBB C8 00 CD 00 D3 00 D7 00-DF 00 E4 00 EC 00 F4 00 |È Í Ó × ß ä ì ô |"
"000000CCB FB 00 FE 01 04 01 05 01-0A 01 14 01 16 01 2D 01 |û þ.-|"
"000000CDB 32 01 3B 01 46 01 4A 01-5C 01 65 01 6E 01 73 01 |2;FJ\ens|"
"000000CEB 76 01 83 01 88 01 8C 01-9B 00 00 00 00 00 00 02 |vƒˆŒ› |"
"000000CFB 01 00 00 00 00 00 00 00-42 00 00 00 00 00 00 00 | B |"
"000000D0B 00 00 00 00 00 00 00 01-A3 | £ |"
最佳答案
如果您计划在 Mac 上运行此脚本,则可以使用 plutil
命令将其转换为更易于解析的 XML 格式:
plutil -convert xml1 -o outfile infile
要将输出发送到 stdout,请使用 -
作为输出文件。如果省略 -o
选项,输出将覆盖输入文件。如果您愿意,可以使用 json
格式而不是 xml1
来获取 JSON 格式的输出。
关于python - 在python中反序列化objective-c二进制NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7707292/