Python中如何将不同字节格式保存为可读文本文件
解决Python中混合字符串与转义十六进制列表的可读保存问题
我来帮你搞定这个问题!你遇到的核心问题是:那些用转义序列(比如'\x12')表示的十六进制字符本质是单个字节,直接写入文件时会被解析成对应的控制字符(比如\x13会显示成),而不是人类可读的十六进制格式。我们需要把这类特殊字符转换成0x##的字符串形式,同时保留原本就是可读格式的元素(比如'TX'、'0x2')。
解决方案:自定义转换函数
我们可以写一个简单的转换函数,逐个处理列表中的每个元素:
- 对于单个字符的字符串(即转义十六进制对应的字符),判断是否是ASCII控制字符(0x00-0x1F、0x7F),如果是就转换成
0xXX格式; - 对于普通字符串(包括多字符文本、已经是
0x##格式的字符串),直接保留原内容。
以下是完整的代码示例:
def convert_to_readable(item): # 处理单个字符的转义十六进制 if isinstance(item, str) and len(item) == 1: char_ord = ord(item) # 针对ASCII控制字符进行转换(符合你例子中的场景) if char_ord < 0x20 or char_ord == 0x7F: return f"0x{char_ord:02x}" # 其他情况直接返回原内容 return item # 你的输入列表 input_list = ['TX', '\x12', '0x2', '0x15', '0xe6', '0x86', '0xce', '\x13'] # 转换所有元素 processed_list = [convert_to_readable(item) for item in input_list] # 拼接成字符串并写入文件 result_str = ''.join(processed_list) with open("output.txt", "w", encoding="utf-8") as f: f.write(result_str)
代码说明
- 转换逻辑:
convert_to_readable函数通过ord(item)获取单个字符的ASCII码,判断是否属于控制字符范围,若是则用格式化字符串转换成小写的0xXX格式(如果需要大写可以改成0x{char_ord:02X})。 - 保留原有可读内容:像
'TX'、'0x2'这类本身就是可读的字符串,会直接被保留,不会被修改。 - 写入文件:最后将处理后的列表拼接成字符串,写入文件时指定编码为
utf-8,避免出现编码问题。
运行这段代码后,文件内容会变成:
TX0x120x20x150xe60x860xce0x13
所有转义的十六进制字符都转换成了可读的0x##格式,完全符合人工读取的需求。
扩展:转换所有单字符(包括可打印字符)
如果你希望把所有单个字符(哪怕是可打印的,比如'\x41'即'A')都转换成十六进制格式,可以去掉控制字符的判断,简化函数:
def convert_to_readable(item): if isinstance(item, str) and len(item) == 1: return f"0x{ord(item):02x}" return item
内容的提问来源于stack exchange,提问作者Matthew Connolly
相关产品推荐
相关产品推荐

