Python 将字节数据列表转换为字符串

Python 将字节数据列表转换为字符串,python,python-3.x,list,python-2.7,Python,Python 3.x,List,Python 2.7,请建议一种将字节列表转换为字符串列表的方法或任何方法,以便我可以将resp数据作为字符串读取,我已尝试使用decode,但不支持以下错误- 类“列表”的未解析属性引用“解码” 解码它: resp = [b'\r\x1b[2K\x1b[39m[00479650ms][INFO][MBED_DC]: dc_func:230 Waiting \r\n', b'\x1b[0m\r\n', b'AT+BOOTARG=TRACE=ON\r\r\n'] decode_list = [] for ite

请建议一种将字节列表转换为字符串列表的方法或任何方法,以便我可以将resp数据作为字符串读取,我已尝试使用decode,但不支持以下错误-

类“列表”的未解析属性引用“解码”

解码它:

resp = [b'\r\x1b[2K\x1b[39m[00479650ms][INFO][MBED_DC]: dc_func:230 Waiting \r\n',
    b'\x1b[0m\r\n', b'AT+BOOTARG=TRACE=ON\r\r\n']
decode_list = []
for item in resp:
    decode_list.append(item.decode("utf-8"))
时间比较:

exp1 = """
resp = [b'item1',b'item2']
new_list = []
for item in resp:
    new_list.append(item.decode("utf-8"))
"""

exp2 = """
resp = [b'item1',b'item2']
new_list = [item.decode("utf-8") for item in resp]
"""

exp3 = """
resp = [b'item1',b'item2']
resp_dec = list(map(lambda x: x.decode("utf-8"), resp))
"""

timeit(exp1, number=1000)
timeit(exp2, number=1000)
timeit(exp3, number=1000)
exp3看起来更“优雅”,尽管它速度较慢

产出:

   exp1 --> 0.0002586000000000116
   exp2 --> 0.00029969999999999997
   exp3 --> 0.0004574999999999996
解码它:

resp = [b'\r\x1b[2K\x1b[39m[00479650ms][INFO][MBED_DC]: dc_func:230 Waiting \r\n',
    b'\x1b[0m\r\n', b'AT+BOOTARG=TRACE=ON\r\r\n']
decode_list = []
for item in resp:
    decode_list.append(item.decode("utf-8"))
时间比较:

exp1 = """
resp = [b'item1',b'item2']
new_list = []
for item in resp:
    new_list.append(item.decode("utf-8"))
"""

exp2 = """
resp = [b'item1',b'item2']
new_list = [item.decode("utf-8") for item in resp]
"""

exp3 = """
resp = [b'item1',b'item2']
resp_dec = list(map(lambda x: x.decode("utf-8"), resp))
"""

timeit(exp1, number=1000)
timeit(exp2, number=1000)
timeit(exp3, number=1000)
exp3看起来更“优雅”,尽管它速度较慢

产出:

   exp1 --> 0.0002586000000000116
   exp2 --> 0.00029969999999999997
   exp3 --> 0.0004574999999999996

使用“映射”对列表中的每个项目进行解码,并将其全部映射到新列表:

resp_decoded=list(映射(lambda i:i.decode('utf8'),resp))

使用map对列表中的每个项目进行解码,并将其全部映射到新列表:

resp_decoded=list(映射(lambda i:i.decode('utf8'),resp))


您期望的输出是什么?
decode
不是列表的方法,而是列表中每个字节对象的方法。迭代列表,边走边解码每个元素。有几种方法可以做到这一点,即
map
和列表理解。
resp\u dec=list(map(lambda x:x.decode(“utf-8”),resp))
谢谢它转换,但在第一项之后停止。你能告诉我如何修复它吗resp=[b'\r\x1b[2K\x1b[39m[00479650ms][INFO][MBED\u DC]:DC\u func:230等待\r\n',b'\x1b吗[0m\r\n',b'AT+BOOTARG=TRACE=ON\r\r\n']resp_decoded=list(map(lambda i:i.decode('utf8'),resp))print(resp_decoded)final_str=“”。join(resp_decoded)print(final_str)=>[00479650ms][INFO][MBED_DC]:dc_func:230正在等待,此处的+BOOTARG=TRACE=ON被跳过检查您的输入/输出。它不应该停止,并且在您的代码示例中,您编写的是您的输入和输出之间没有相关性。因此我有理由相信您的输入与您在问题中编写的不完全相同。您预期的输出是什么?
decode
不是列表的一种方法,但列表中的每个字节对象都有一种方法。在列表中迭代,对每个元素进行解码。有几种方法可以做到这一点,即
map
和列表理解。
resp_dec=list(map(lambda x:x.decode(“utf-8”),resp))
谢谢,它会转换,但在第一项后会停止。请告诉我如何修复它resp=[b'\r\x1b[2K\x1b[39m[00479650ms][INFO][MBED\u DC]:DC\u func:230等待\r\n',b'\x1b[0m\r\n',b'AT+BOOTARG=TRACE=ON\r\r\n']resp\u decoded=list(map(lambda i:i.decode('utf8'),resp))打印(resp\u decoded)最终加入(resp\u decoded)打印(最终数据)==>[00479650ms][INFO][MBED\u DC]:dc_func:230正在等待,此处的+BOOTARG=TRACE=ON被跳过检查您的输入/输出。它不应该停止,并且在您的代码示例中,您编写的内容是您的输入和输出之间没有关联。因此我有理由相信您的输入与您在问题中编写的内容不完全相同。我已经尝试过这一点——它失败于list'object has无属性'decode'@Lp Tester这是列表中的每个项目,而不是列表本身。如上所述,decode不是列表的一种方法。感谢David,它适用于单个项目,我可以通过任何方式一次获取所有字符串,目前它停止在[00479650ms][INFO][MBED_DC]:dc_func:230仅在等待,下一个at+bootarg无法转换我只喜欢在一个小样本集上运行一次微基准测试,差异很小,可以声称某个测试“更快”@Lp Tester re edithad已经尝试过此方法——它失败,列表“对象没有属性”“解码”@Lp Tester这是列表中的每个项目,而不是列表本身。如上所述,解码不是列表的一种方法。感谢David,它适用于单个项目。我可以以任何方式一次获取所有字符串。它当前停止在[00479650ms][INFO][MBED_DC]:DC_func:230仅在等待,下一个at+bootarg没有得到转换我只是喜欢在一个很小的样本集上运行一次微基准测试,与声称某些东西“更快”没有什么区别。@Lp Tester re edit这没有给出列表,而是一个映射object@mcsoini正确,当然你上面的建议解决了这个问题:)谢谢,它转换了,但在第一个项目后停止了。你能告诉我如何修复它吗?resp=[b'\r\x1b[2K\x1b[39m[00479650ms][INFO][MBED\u DC]:DC\u func:230等待\r\n',b'\x1b[0m\r\n',AT+BOOTARG=TRACE=ON\r\n']resp\u decoded=list(map(lambda i:i.decode('utf8'),resp))print(resp\u decoded)final\u str=“”)join(resp\r\u d)print)[00479650ms][INFO][MBED_DC]:DC_func:230正在等待,此处的+BOOTARG=TRACE=ON被跳过。这并没有给出列表,而是一个映射object@mcsoini正确,当然你上面的建议解决了:)谢谢,它会转换,但在第一项之后会停止。你能告诉我如何修复它吗resp=[b'\r\x1b[2K\x1b[39m[00479650ms][INFO][MBED\u DC]:dc_func:230 Waiting\r\n',b'\x1b[0m\r\n',b'AT+BOOTARG=TRACE=ON\r\n']resp_decoded=list(map(lambda i:i.decode('utf8'),resp))print(resp_decoded)final_str=“”。join(resp_decoded)print(final_str)=>[00479650ms][INFO][MBED_dc]:dc_func:230 Waiting,此处AT+BOOTARG=TRACE=ON被跳过