如何用pandas读取含二进制数的文本文件并保留0b前缀及完整前导零
实现方案
核心逻辑
你需要的0b+完整前导零格式本质是带前缀的定长二进制字符串,Python原生整数类型不会保留前导零,因此读取时直接按原始字符串存储即可,如需做数值运算可同步存储对应的整数值,和原始格式化字符串配对使用即可。
完整实现代码
假设你的text_file.txt每行存储一组空格分隔的x、y二进制值,共256行,可参考如下代码实现:
from sgposit.pcposit import PCPosit result_list = [] # 读取文件保留原始二进制格式 with open("text_file.txt", "r", encoding="utf-8") as f: for line in f: line = line.strip() # 跳过空行 if not line: continue # 按实际分隔符调整split参数,逗号分隔就用split(',') x_raw, y_raw = line.split() # 可选:校验格式是否符合0b+8位二进制的要求 assert len(x_raw) == 10 and x_raw.startswith("0b"), f"x值{x_raw}格式不符合要求" assert len(y_raw) == 10 and y_raw.startswith("0b"), f"y值{y_raw}格式不符合要求" # 生成PCPosit实例,mode='bits'支持字符串输入可直接传原始值 a = PCPosit(x_raw, mode='bits', nbits=8, es=2) # 获取a的0b+8位前导零的二进制格式 a_bin = f"0b{a.to_bits():08b}" result_list.append({ "x_raw": x_raw, "y_raw": y_raw, "a_binary": a_bin, "a_instance": a }) # 测试输出第一条结果 print(f"读取的x原始值:{result_list[0]['x_raw']}") print(f"读取的y原始值:{result_list[0]['y_raw']}") print(f"对应a的二进制格式:{result_list[0]['a_binary']}")
如果你的text_file.txt是每行存储单个二进制值,前256行对应x、后256行对应y,调整读取逻辑即可:
with open("text_file.txt", "r", encoding="utf-8") as f: all_valid_lines = [line.strip() for line in f if line.strip()] x_list = all_valid_lines[:256] y_list = all_valid_lines[256:512]
注意事项
- 不要将读取到的二进制字符串直接转成整数后再转回二进制,会自动丢失前导零
- 如需对x、y做数值计算,可同时存储对应整数值:
x_int = int(x_raw, 2),和原始字符串配对使用即可
内容的提问来源于stack exchange,提问作者MR Karim
相关产品推荐
相关产品推荐

