标题中的问题可能无法反映我的确切想要......我会尽力而为。
我将以下十六进制字符串表示为字节串:
S =' \ X00 \ X00 \ X01B \ x90bM \ xe0 \ X00 \ X00 \ X00'?
我有一个hbase表,其中行键的格式与“'”相同。但是当我以这种格式传递范围会产生错误:" utf-8无法解码字节..."
sparkconf = {" hbase.zookeeper.quorum":" myHostIP"," hbase.mapreduce.inputtable":" myHbaseTable", " hbase.mapreduce.scan.columns":" c1:c2"," hbase.mapreduce.scan.row.start":startRow," hbase .mapreduce.scan.row.stop":endRow}
似乎startRow和endRow必须是字符串?
如果是这样,有没有办法格式化/转换s =' \ x00 \ x00 \ x01b?\ x90bM \ xe0 \ x00 \ x00 \ x00'到一串相同的字符?
通过这个,我不是指转换Hex t字符串,我的意思是我需要一个字符串,如 str_s = MAKESTRING(s)会导致 str_s =' \ x00 \ x00 \ x01b?\ x90bM \ xe0 \ x00 \ x00 \ x00' 其中 str_s [0] =' \',str_s [1] =&#39 ; x',str_s [2] =' 0'等...
非常感谢您的帮助,我是python,pyspark和hbase的新手。
答案 0 :(得分:0)
您可能希望使用以下内容:
def printable_repr(s):
""" Convert to a printable representation.
Replace each nonprintable ascii byte in s by its
hex representation (\xXX)
"""
printable_s = []
for c in s:
if 32 <= ord(c) and ord(c) <= 126:
printable_s.append(c)
else:
printable_s.append("\\%02x" % ord(c))
return ''.join(printable_s)
s = '\x00\x00\x01b?\x90bM\xe0\x00\x00\x00'
s_str = printable_repr(s)
print("s_str: " + s_str)
for i in range(0, len(s_str)):
print(str(i) + ": " + s_str[i])
该脚本生成此输出(Python 3.4.2):
s_str: \00\00\01b?\90bM\e0\00\00\00
0: \
1: 0
2: 0
3: \
4: 0
5: 0
6: \
7: 0
8: 1
9: b
10: ?
11: \
12: 9
13: 0
14: b
15: M
16: \
17: e
18: 0
19: \
20: 0
21: 0
22: \
23: 0
24: 0
25: \
26: 0
27: 0
当然,如果您希望用十六进制表示替换可打印的ascii字符,也可以轻松简化脚本。