用python解析位数组

用python解析位数组,python,parsing,peg,parsimonious,Python,Parsing,Peg,Parsimonious,我正在我的一个项目中使用它来存储位(从一个包含“0”和“1”的文件中读取,以及所需的时间信息。该文件也可以没有必要的字段,如注释等)。现在我想解析这些位。我在阅读文件时过滤掉了文件中所有不必要的东西。所以我需要一个能解析位(位数组)的解析器 目前,我正在使用解析器来解析字符串(即“0”和“1”),但这个解析器似乎只是将字符串作为输入。所有解析器都是这样吗?或者我可以编写语法规则来匹配python位数组/位字符串或列表或任何其他非字符串数据结构吗 那么,如果我想解析位(位数组),什么是最好的方法呢

我正在我的一个项目中使用它来存储位(从一个包含“0”和“1”的文件中读取,以及所需的时间信息。该文件也可以没有必要的字段,如注释等)。现在我想解析这些位。我在阅读文件时过滤掉了文件中所有不必要的东西。所以我需要一个能解析位(位数组)的解析器

目前,我正在使用解析器来解析字符串(即“0”和“1”),但这个解析器似乎只是将字符串作为输入。所有解析器都是这样吗?或者我可以编写语法规则来匹配python位数组/位字符串或列表或任何其他非字符串数据结构吗

那么,如果我想解析位(位数组),什么是最好的方法呢

例如:

我在文件中有一个字符串“011000111100011010”。因为字符串中的“0”是一个字符,所以它占用内存中的8位。因为这是内存浪费(因为我只需要一个位来存储0),所以我计划将这些位存储在位数组中

比方说,我想匹配一个帧(长度为18位),它们可以表示为

frame(18bits) = field1(6bits) field2(2bits) field3(5bits) field4(5bits)
那么,我如何编写一个简单的语法规则来匹配这些位呢

这是我用吝啬的方式来做的(这里我把一个“0”当作一个字符)


这只是一个例子,实际上情况要复杂得多。甚至文件大小也太大(~1GB)。因此,我正在搜索一个可以存储位(而不是字符)的数据结构和一个可以在python中解析位(而不是字符)的解析器

您有一个1GB的文件,它只是字符
0
1
?看起来很浪费…你应该在存储之前打包这些位以减少文件大小。而且,对于解析位字段来说,吝啬是远远不够的。学习打包位,然后使用位移位提取位。您的文件是二进制数据还是字符数据?如果是字符数据,则表示您没有读取字节。@nneonneo:我已编辑了我的问题。实际上,这个文件可以包含任何数据,但我从中过滤出有用的信息并对其进行解析。文件是用户为应用程序提供的输入。所以我无法控制它。那么,还有什么可以作为输入呢?为什么不把所有的位读入一个位数组,然后使用切片。。。?
frame_matcher = field1 field2 field3 field4
field1 = ~"[01]{6}"
field2 = ~"[01]{2}"
field3 = ~"[01]{5}"
field4 = ~"[01]{5}"