分割字节数组然后将其转换为Python

时间:2016-08-30 10:17:15

标签: python python-3.x numpy split

我有一个包含字符的numpy bytes数组,后跟b'',后跟其他字符(包括在解码时引发Unicode错误的奇怪字符):

bytes = numpy.array([b'f', b'o', b'o', b'', b'b', b'a', b'd', b'\xfe', b'\x95', b'', b'\x80', b'\x04', b'\x08' b'\x06'])

我希望在第一个b''之前得到所有内容。

目前我的代码是:

txt = []
for c in bytes:
    if c != b'':
        txt.append(c.decode('utf-8'))
    else:
        break
txt = ''.join(txt)

我认为有更高效和Pythonic的方式来做到这一点。

1 个答案:

答案 0 :(得分:4)

我喜欢你的方式,这是明确的,所有人都可以理解for循环,与其他方法相比,它并不是那么慢。

我提出的一些建议是将您的条件从if c != b''更改为if c,因为非空字节对象将是真实的,并且*不要为您的列表命名bytes,你屏蔽了内置的!将其命名为bt或类似名称: - )

其他选项包括itertools.takewhile,只要谓词成立,它就会从迭代中获取元素;你的操作看起来像:

"".join(s.decode('utf-8') for s in takewhile(bool, bt))

这个稍微慢一些,但是如果你是一个单行情人,这可能会对你有吸引力。

使用index以及切片时,速度更快且更紧凑:

"".join(b.decode('utf-8') for b in bt[:bt.index(b'')])

虽然紧凑但它也有可读性。

简而言之,我会选择for循环,因为在我看来,可读性非常像pythonic。

相关问题