包格式字符串中的自动重复标志
在 php 中,unpack() 有“*”标志,表示“重复此格式直到输入结束”。例如,打印 97, 98, 99
$str = "abc";
$b = unpack("c*", $str);
print_r($b);
python 中有类似的东西吗?当然,我可以这样做
str = "abc"
print struct.unpack("b" * len(str), str)
,但我想知道是否有更好的方法。
In php, unpack() has the "*" flag which means "repeat this format until the end of input". For example, this prints 97, 98, 99
$str = "abc";
$b = unpack("c*", $str);
print_r($b);
Is there something like this in python? Of course, I can do
str = "abc"
print struct.unpack("b" * len(str), str)
but I'm wondering if there is a better way.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在Python 3.4及更高版本中,您可以使用新函数
struct .iter_unpack
。假设我们要使用重复格式字符串
'<2sc'
(2 个字符后跟一个字符)解压数组b'\x01\x02\x03'*3
字符,重复直到完成)。使用
iter_unpack
,您可以执行以下操作:如果您想取消嵌套此结果,可以使用
itertools.chain.from_iterable
。当然,您可以使用嵌套理解来完成同样的事情。
In Python 3.4 and later, you can use the new function
struct.iter_unpack
.Let's say we want to unpack the array
b'\x01\x02\x03'*3
with the repeating format string'<2sc'
(2 characters followed by a single character, repeat until done).With
iter_unpack
, you can do the following:If you want to un-nest this result, you can do so with
itertools.chain.from_iterable
.Of course, you could just employ a nested comprehension to do the same thing.
struct.unpack 中没有内置这样的工具,但可以定义这样的函数:
There is no such facility built into
struct.unpack
, but it is possible to define such a function: