如何将文件读取的bytearray(b'\x03\x05\n')转为3字符字符串或列表?
最简实现:把字符串形式的bytearray转成3字符字符串/列表
嘿,这个场景我碰到过!你现在手里的是字符串格式的bytearray字面量,不是真正的bytearray对象,所以得先把它解析成实际的bytearray,之后转换就超简单了。
第一步:安全解析字符串为bytearray
别用eval()(不安全,容易执行恶意代码),用ast.literal_eval()是最优解——它只会解析Python的字面量,完全安全:
import ast # 你从a.txt读取到的字符串 input_str = "bytearray(b'\x03\x05\n')" # 解析成真实的bytearray对象 ba = ast.literal_eval(input_str)
现在ba就是实打实的bytearray(b'\x03\x05\n'),里面包含3个字节元素:0x03、0x05、0x0A(也就是ASCII的换行符)。
第二步:转成3字符字符串
因为你的字节里有控制字符,用latin-1编码解码最稳妥(它能1:1映射所有0-255的字节到Unicode字符,不会丢数据):
char_str = ba.decode('latin-1') # 结果是 '\x03\x05\n',长度为3的字符串
第三步:转成3元素列表
分两种情况:
- 想要字节值的整数列表:直接转成list就行
byte_value_list = list(ba) # 结果是 [3, 5, 10] - 想要字符形式的列表:遍历每个字节转成字符
char_list = [chr(b) for b in ba] # 结果是 ['\x03', '\x05', '\n']
小提示
如果你确定输入字符串绝对安全(比如自己生成的文件),也可以用eval()代替ast.literal_eval(),但前者风险高,不推荐在生产环境用。
内容的提问来源于stack exchange,提问作者Jitesh
相关产品推荐
相关产品推荐

