如何读取CSV中字节表示为bytes类型及十六进制转字节方法咨询
我来帮你解决这两个问题——从CSV读取b'...'格式的字符串转为真实bytes对象,以及十六进制转字节的方法,都是Python里很实用的操作:
1. 解析CSV中b'...'格式的字符串为bytes类型
你提到手动复制b'...'到变量能直接用,但从CSV读出来是字符串形式,这时候用ast.literal_eval()是最安全可靠的方法,它能解析Python的字面量表达式,而且比eval()安全(不会执行恶意代码)。
举个完整的读取CSV并转换的例子:
import ast import csv # 读取CSV文件 with open('your_data.csv', 'r', encoding='utf-8', newline='') as csv_file: reader = csv.reader(csv_file, delimiter=';') for text_val, byte_str in reader: # 把字符串形式的b'...'转换成真实的bytes对象 actual_bytes = ast.literal_eval(byte_str) print(f"文本值: {text_val}, 字节类型: {type(actual_bytes)}, 字节内容: {actual_bytes}")
运行后actual_bytes就是真正的bytes类型,和你手动复制的效果完全一样。
2. 十六进制字符串转字节
Python有两种常用方式实现这个转换:
- 方法一:使用
bytes.fromhex()(推荐,无需额外导入)
这个方法直接把十六进制字符串转为bytes,注意十六进制字符串要成对出现(不能是奇数长度):
hex_str = "5554050003" # 对应b'UT\x05\x00\x03'的十六进制表示 byte_data = bytes.fromhex(hex_str) print(byte_data) # 输出 b'UT\x05\x00\x03'
- 方法二:使用
binascii.unhexlify()
如果需要处理一些特殊场景,也可以用binascii模块的方法:
import binascii hex_str = "5554050003" byte_data = binascii.unhexlify(hex_str) print(byte_data) # 同样输出 b'UT\x05\x00\x03'
如果你的十六进制字符串里有空格或者其他分隔符,记得先清理掉,比如hex_str.replace(" ", "")再转换。
内容的提问来源于stack exchange,提问作者Raul
相关产品推荐
相关产品推荐

