如何通过Python将二进制数据转换为十六进制?
How do I convert binary data to hexadecimal through Python?
所以我试图将数据库中的二进制数据字段作为十六进制字符串获取。我不知道这是否正是我正在寻找的,但这是我的直觉。我的数据框中有一个名为 status
的列,在 PostgreSQL 中显示 [binary data]
但是当我执行以下命令时,它看起来像这样:
df = pd.read_sql_query("""SELECT * FROM public."Vehtek_SLG" LIMIT 1000""",con=engine.connect())
如何获取该列中的实际数据?
看起来您的 DataFrame 的每一行都有一个单独字节的列表,而不是整个十六进制字节字符串。系列 df["status"].map(b"".join)
将具有连接的字节字符串。
import random
import pandas as pd
# Simulating lists of 10 bytes for each row
df = pd.DataFrame({
"status": [
[bytes([random.randint(0, 255)]) for _ in range(10)]
for _ in range(5)
]
})
s = df["status"].map(b"".join)
两个对象看起来像:
# df
status
0 [b'\xb3', b'f', b';', b'P', b'\xcb', b'\x9b', ...
1 [b'\xd2', b'\xe8', b'.', b'b', b'g', b'|', b'\...
2 [b'\xa7', b'\xe1', b'z', b'-', b'W', b'\xb8', ...
3 [b'\xc5', b'\xa9', b'\xd5', b'\xde', b'\x1d', ...
4 [b'\xa3', b'b', b')', b'\xe3', b'5', b'`', b'\...
# s
0 b'\xb3f;P\xcb\x9bi\xb0\x9e\xfd'
1 b'\xd2\xe8.bg|\x94O\x90\n'
2 b'\xa7\xe1z-W\xb8\xc2\x84\xb91'
3 b'\xc5\xa9\xd5\xde\x1d\x02*}I\x15'
4 b'\xa3b)\xe35`\x0ed#g'
Name: status, dtype: object
将状态字段转换为二进制后,我们可以使用以下命令将其变为十六进制。
df['status'] = s.apply(bytes.hex)
现在这是你的领域!
df['status'].head()
0 1f8b0800000000000400c554cd8ed33010beafb4ef6045...
1 1f8b0800000000000400c554cd8ed33010beafb4ef6045...
2 1f8b0800000000000400c554cd6e9b4010be47ca3bac50...
3 1f8b0800000000000400c554cd6e9b4010be47ca3bac50...
4 1f8b0800000000000400c554cd6e9b4010be47ca3bac50...
所以我试图将数据库中的二进制数据字段作为十六进制字符串获取。我不知道这是否正是我正在寻找的,但这是我的直觉。我的数据框中有一个名为 status
的列,在 PostgreSQL 中显示 [binary data]
但是当我执行以下命令时,它看起来像这样:
df = pd.read_sql_query("""SELECT * FROM public."Vehtek_SLG" LIMIT 1000""",con=engine.connect())
如何获取该列中的实际数据?
看起来您的 DataFrame 的每一行都有一个单独字节的列表,而不是整个十六进制字节字符串。系列 df["status"].map(b"".join)
将具有连接的字节字符串。
import random
import pandas as pd
# Simulating lists of 10 bytes for each row
df = pd.DataFrame({
"status": [
[bytes([random.randint(0, 255)]) for _ in range(10)]
for _ in range(5)
]
})
s = df["status"].map(b"".join)
两个对象看起来像:
# df
status
0 [b'\xb3', b'f', b';', b'P', b'\xcb', b'\x9b', ...
1 [b'\xd2', b'\xe8', b'.', b'b', b'g', b'|', b'\...
2 [b'\xa7', b'\xe1', b'z', b'-', b'W', b'\xb8', ...
3 [b'\xc5', b'\xa9', b'\xd5', b'\xde', b'\x1d', ...
4 [b'\xa3', b'b', b')', b'\xe3', b'5', b'`', b'\...
# s
0 b'\xb3f;P\xcb\x9bi\xb0\x9e\xfd'
1 b'\xd2\xe8.bg|\x94O\x90\n'
2 b'\xa7\xe1z-W\xb8\xc2\x84\xb91'
3 b'\xc5\xa9\xd5\xde\x1d\x02*}I\x15'
4 b'\xa3b)\xe35`\x0ed#g'
Name: status, dtype: object
将状态字段转换为二进制后,我们可以使用以下命令将其变为十六进制。
df['status'] = s.apply(bytes.hex)
现在这是你的领域!
df['status'].head()
0 1f8b0800000000000400c554cd8ed33010beafb4ef6045...
1 1f8b0800000000000400c554cd8ed33010beafb4ef6045...
2 1f8b0800000000000400c554cd6e9b4010be47ca3bac50...
3 1f8b0800000000000400c554cd6e9b4010be47ca3bac50...
4 1f8b0800000000000400c554cd6e9b4010be47ca3bac50...