如何将'\\'替换为'\'且不触发EOL错误?读取文件转义字节数据问题
解决方案
现有转义字符串处理
不要手动替换反斜杠,使用Python标准库ast模块的literal_eval方法可以安全解析这类bytes字面量字符串,自动还原为原生bytes对象,不会触发EOL错误:
import ast # line为readline返回的转义字符串 line = "b'\\xe0\\xa8\\xaa\\xe0\\xa9\\xb0\\xe0\\xa8\\x9c\\xe0\\xa8\\xbe\\xe0\\xa8\\xac\\xe0\\xa9\\x80'" # 解析得到原生bytes对象 raw_bytes = ast.literal_eval(line) # 按编码正常解码即可 result = raw_bytes.decode("utf-8")
literal_eval只会解析Python字面量(字符串、数字、bytes、元组列表等基础结构),不会执行任意代码,安全性远高于直接用eval。
从读取环节规避转义问题
出现该问题的核心原因是你读取的文件本身存储的是bytes对象的repr输出文本,而非原始二进制数据:
- 如果文件是你自己生成的,后续存储时直接使用二进制写入模式,不要写入bytes的repr字符串:
写入示例:
读取示例:content = b'\xe0\xa8\xaa\xe0\xa9\xb0\xe0\xa8\x9c\xe0\xa8\xbe\xe0\xa8\xac\xe0\xa9\x80' with open("data.bin", "wb") as f: f.write(content)with open("data.bin", "rb") as f: raw_bytes = f.readline() # 直接解码即可,无转义问题 result = raw_bytes.decode("utf-8") - 如果是必须处理已有的存了bytes字面量的文本文件,统一使用上面的
ast.literal_eval方法处理即可。
内容的提问来源于stack exchange,提问作者Avinash
相关产品推荐
相关产品推荐

