此处将为大家介绍关于Pythonbase36编码的详细内容,并且为您解答有关python编码大全的相关问题,此外,我们还将为您介绍关于Base系列编码浅析【base16base32base64base
此处将为大家介绍关于Python base 36编码的详细内容,并且为您解答有关python编码大全的相关问题,此外,我们还将为您介绍关于Base系列编码浅析【base16 base32 base64 base85 base36 base 58 base91 base 92 base62】、Hbase基础(二十一):python操作hbase之happybase、java – Base36编码一个字符串?、Python Base64编码的有用信息。
本文目录一览:- Python base 36编码(python编码大全)
- Base系列编码浅析【base16 base32 base64 base85 base36 base 58 base91 base 92 base62】
- Hbase基础(二十一):python操作hbase之happybase
- java – Base36编码一个字符串?
- Python Base64编码
Python base 36编码(python编码大全)
如何在Python中以36为底的整数进行编码,然后再次对其进行解码?
答案1
小编典典您是否尝试过Wikipedia的示例代码?
def base36encode(number, alphabet=''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ''): """Converts an integer to a base36 string.""" if not isinstance(number, (int, long)): raise TypeError(''number must be an integer'') base36 = '''' sign = '''' if number < 0: sign = ''-'' number = -number if 0 <= number < len(alphabet): return sign + alphabet[number] while number != 0: number, i = divmod(number, len(alphabet)) base36 = alphabet[i] + base36 return sign + base36def base36decode(number): return int(number, 36)print base36encode(1412823931503067241)print base36decode(''AQF8AA0006EH'')
Base系列编码浅析【base16 base32 base64 base85 base36 base 58 base91 base 92 base62】
Base系列编码浅析
Base16
- 使用16个ASCII可打印字符(数字0-9和字母A-F),对任意字节数据进行编码。
- 先获取输入字符串每个字节的二进制值(不足8比特在高位补0),然后将其串联进来,再按照4比特一组进行切分,将每组二进制数分别转换成十进制。
- Base16编码后的数据量是原数据的两倍:1000比特数据需要250个字符(即 250*8=2000 比特)。
Base32
- Base32编码是使用32个可打印字符(字母A-Z和数字2-7)对任意字节数据进行编码的方案,编码后的字符串不用区分大小写并排除了容易混淆的字符,可以方便地由人类使用并由计算机处理。
- Base32主要用于编码二进制数据,但是Base32也能够编码诸如ASCII之类的二进制文本。
- Base32将任意字符串按照字节进行切分,并将每个字节对应的二进制值(不足8比特高位补0)串联起来,按照5比特一组进行切分,并将每组二进制值转换成十进制来对应32个可打印字符中的一个。
Base64
- Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于
,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。
- 在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法。
- 它可用来作为电子邮件的传输编码。
- Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
Base85
- base85 也称为Ascii85,是Paul E. Rutter为btoa实用程序开发的一种二进制文本编码形式。通过使用五个ASCII字符来表示四个字节的二进制数据(使编码量1 / 4比原来大,假设每ASCII字符8个比特),它比更有效UUENCODE或Base64的,它使用四个字符来表示三个字节的数据(1 / 3的增加,假设每ASCII字符8个比特)。
- 用途是Adobe的PostScript和Portable Document Format文件格式,以及Git使用的二进制文件的补丁编码。
- 与Base64一样,Base85编码的目标是对二进制数据可打印的ASCII字符进行编码。但是它使用了更大的字符集,因此效率更高一些。具体来说,它可以用5个字符编码4个字节(32位)。
Base36
def base36encode(integer):
chars = ''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ''
sign = ''-'' if integer < 0 else ''''
integer = abs(integer)
result = ''''
while integer > 0:
integer, remainder = divmod(integer, 36)
result = chars[remainder]+result
return sign+result
Base58
- Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。
- 相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。
-
避免混淆。在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。
-
不使用"+"和"/"的原因是非字母或数字的字符串作为帐号较难被接受。
-
没有标点符号,通常不会被从中间分行。
-
大部分的软件支持双击选择整个字符串。
Base91
- basE91是将二进制数据编码为ASCII字符的高级方法。
- 它类似于UUencode或base64,但效率更高。 basE91产生的开销取决于输入数据。 它的数量最多为23%(而base64为33%),范围可以降低到14%,通常发生在0字节块上。
- 这使得basE91对于通过二进制不安全连接(例如电子邮件或终端线)传输较大的文件非常有用。
Base92
Base62
- Base62编码将数字转换为ASCII字符串(0-9,az和AZ),反之亦然,这通常会导致字符串较短。
- 62进制转10进制与2进制转10进制相似。
Hbase基础(二十一):python操作hbase之happybase
来源:https://blog.csdn.net/qq_43279457/article/details/109137470
happybase官方文档:https://happybase.readthedocs.io/en/latest/api.html#
0 hbase准备
0.1 使用happybase库操作hbase
先安装该库 pip install happybase
0.2 然后确保 hadoop 和 hbase 可用并开启
能进行hdfs操作就代表hadoop正常运行
能在 hbase shell 下使用 list 命令并不报错就代表能正常运行
0.3 开启thrift
使用命令开启
$HBASE_HOME/bin/hbase-daemon.sh start thrift
使用命令 jps
查看是否开启成功
1 连接hbase
- 连接操作
import happybase con = happybase.Connection('192.168.31.105') con.open() # 打开传输 print(con.tables()) # 输出所有表名 con.close() # 关闭传输
进入Connection对象中,左边列出了许多Connection对象中可以操作的函数,这些函数能在表级上操作表,如创建表,禁用表,删除表(hbase中要先禁用表后才能删除表),创建表对象等
其中最常用的是创建表对象,table函数就是创建表对象,定位到table函数这里,发现他返回的是Table()对象,继续跟进Table对象
左边是Table对象下的函数,里边有查看单元格,查看列,删除数据,创建数据等。
2 表操作
2.1 创建表
import happybase con = happybase.Connection('192.168.31.105') # 默认9090端口 con.open() # 打开thrift传输,TCP连接 families = { 'wangzherongyao': dict(max_versions=2), # 设置最大版本为2 'hepingjingying': dict(max_versions=1, block_cache_enabled=False), 'xiaoxiaole': dict(), # 使用默认值.版本默认为3 } con.create_table('games', families) # games是表名,families是列簇,列簇使用字典的形式表示,每个列簇要添加配置选项,配置选项也要用字典表示 print(con.tables())
配置选项:
max_versions (int类型)
compression (str类型)
in_memory (bool类型)
bloom_filter_type (str类型)
bloom_filter_vector_size (int类型)
bloom_filter_nb_hashes (int类型)
block_cache_enabled (bool类型)
time_to_live (int类型)
2.2 启动或禁用表
要设置或者删除表时,必须得先禁用表,再删除。只能禁用或启动一次,不能重复,否则报错。
# 禁用表 import happybase con = happybase.Connection('192.168.31.105') # 默认9090端口 con.open() # 打开thrift传输,TCP连接 con.disable_table('games') # 禁用表,games代表表名 print(con.is_table_enabled('games')) # 查看表的状态,False代表禁用,True代表启动 print(con.tables()) # 即使禁用了该表,该表还是存在的,只是状态改变了 con.close() # 关闭传输
# 启动表 import happybase con = happybase.Connection('192.168.31.105') # 默认9090端口 con.open() # 打开thrift传输,TCP连接 con.enable_table('games') # 启动该表 print(con.is_table_enabled('games')) # 查看表的状态,False代表禁用,True代表启动 print(con.tables()) # 即使禁用了该表,该表还是存在的,只是状态改变了 con.close() # 关闭传输
2.3 删除表
删除一个表要先将该表禁用,之后才能删除。下面的delete_table函数不但可以禁用表还可以删除表。如果前面已经禁用了该表,delete_table函数就可以不用加第二个参数,默认为False
import happybase con = happybase.Connection('192.168.31.105') # 默认9090端口 con.open() # 打开thrift传输,TCP连接 con.delete_table('games', disable=True) # 第一个参数表名,第二个参数表示是否禁用该表 print(con.tables())
3.数据操作
3.1 建立数据
这里向单元格写一个数据。
注意:如果写数据时没有这个列名,就新建这样的列名,再写数据。
在 hbase shell 中,使用put命令,一次只能写入一个单元格,而happybase库的put函数能写入多个。
import happybase con = happybase.Connection('192.168.31.105') # 默认9090端口 con.open() # 打开传输 biao = con.table('games') # games是表名,table('games')获取某一个表对象 wangzhe = { 'wangzherongyao:名字': '别出大辅助', 'wangzherongyao:等级': '30', 'wangzherongyao:段位': '最强王者', } biao.put('0001', wangzhe) # 提交数据,0001代表行键,写入的数据要使用字典形式表示 # 下面是查看信息,如果不懂可以继续看下一个 one_row = biao.row('0001') # 获取一行数据,0001是行键 for value in one_row.keys(): # 遍历字典 print(value.decode('utf-8'), one_row[value].decode('utf-8')) # 可能有中文,使用encode转码 con.close() # 关闭传输
3.2 查看操作
下面连接之后,就创建一个表对象,然后对这个表对象进行操作,这里演示了多种查看操作,第一个是查看一行的数据,第二个是查看一个单元格的数据,因为我存储时使用了中文,在hbase中存储的不是中文,而是utf-8的编码,这里接收了hbase传过来的编码数据之后对它进行解码,第三个是获取多行的数据,第四个是使用扫描器获取整个表的数据。
import happybase con = happybase.Connection('192.168.31.105') # 默认9090端口 con.open() # 打开传输 biao = con.table('games') # games是表名,table('games')获取某一个表对象 print('-----------------------第一个-----------------------------') one_row = biao.row('0001') # 获取一行数据,0001是行键 for value in one_row.keys(): # 遍历字典 print(value.decode('utf-8'), one_row[value].decode('utf-8')) # 可能有中文,使用encode内置函数转码 print('-----------------------第二个-----------------------------') print(biao.cells('0001', 'wangzherongyao:段位')[0].decode('utf-8')) # 获取一个单元格信息,返回列表,转码输出,0001是行键,wangzherongyao是列簇名,是列名 print('-----------------------第三个-----------------------------') for key, value in biao.rows(['0001', '0002']): # 获取多行的数据,列表或元组中可以写入多个行键 # print(key, '<=====>', value) # 由于0002我没有写入数据,就查不到,也不返回信息 for index in value.keys(): # 遍历字典 print(key.decode('utf-8'), index.decode('utf-8'), value[index].decode('utf-8')) # 可能有中文,使用encode转码 print('-----------------------第四个----------------------------') for rowkey, liecu in biao.scan(): # 获取扫描器对象,该对象是可迭代对象。扫描器记录了一个表的结构 # print(rowkey, '<=====>', liecu) for index in liecu.keys(): # 遍历字典 print(rowkey.decode('utf-8'), index.decode('utf-8'), liecu[index].decode('utf-8')) # 可能有中文,使用encode转码 con.close() # 关闭传输
以上四种方法都支持添加时间戳选项查看数据
3.3 删除数据
import happybase con = happybase.Connection('192.168.31.105') # 默认9090端口 con.open() # 打开传输 biao = con.table('games') # games是表名,table('games')获取某一个表对象 biao.delete('0003', ['wangzherongyao:段位']) # 删除一个单元格信息 # biao.delete('0003', ['wangzherongyao:名字', 'wangzherongyao:等级']) # 删除多个单元个信息 # biao.delete('0003', ['wangzherongyao']) # 删除一列簇信息 # biao.delete('0003') # 删除一整行信息 # 查看数据,看看是否还在 for rowkey, liecu in biao.scan(): # 获取扫描器对象,该对象是可迭代对象。扫描器记录了一个表的结构 # print(rowkey, '<=====>', liecu) for index in liecu.keys(): # 遍历字典 print(rowkey.decode('utf-8'), index.decode('utf-8'), liecu[index].decode('utf-8')) # 可能有中文,使用encode转码 con.close() # 关闭传输
前面说过,删除是根据时间戳来删除最近的版本,再次查看时显示的下一个时间戳最近的版本,那么下面测试一下是不是这样。
import happybase con = happybase.Connection('192.168.31.105') # 默认9090端口 con.open() # 打开传输 biao = con.table('games') # games是表名,table('games')获取某一个表对象 biao.put('0001', {'wangzherongyao:段位': '最强王者'}) biao.put('0001', {'wangzherongyao:段位': '永恒钻石V'}) biao.put('0001', {'wangzherongyao:段位': '尊贵铂金I'}) # 重复写三个值 print(biao.cells('0001', 'wangzherongyao:段位')) # 查看单元格的数据显示为最后一个时间戳的版本,即尊贵铂金I biao.delete('0001', ['wangzherongyao:段位']) # 删除单元格的信息,按照正常的理论查看时显示永恒钻石V print(biao.cells('0001', 'wangzherongyao:段位')) # 查看单元格的信息,显示为空 con.close() # 关闭传输
很奇怪,答案错误,他把里面的东西都删了,那么问题出现在哪里? 看 hbase shell
下是操作怎样的
按照 hbase shell
的操作,理论上是没错的,那么问题出现在哪里?问题出现在 deleteall
操作
可以猜测出,happybase库的 delete 函数封装的是 hbase shell 中的 deleteall 函数,所以调用要delete函数时要谨慎
3.4 批处理
batch()函数可以创建一个可执行对象,然后在进行批处理操作,其实该函数返回了Batch对象,Batch对象支持上下文管理协议,可以执行批量写put操作、批量删delete操作,然后还要使用发送send函数提交到服务器,个人感觉比较鸡肋。其实上面讲的delete函数就是调用了这里的delete函数
java – Base36编码一个字符串?
我一直在网上寻找,但无法找到解决方案.在Python,Ruby或Java中,我如何基于36编码以下字符串:norG9Eh0uyeilM8Nnu5pTywj3935kW 5 =
解决方法:
ruby
以36为基础:
s.unpack('H*')[0].to_i(16).to_s 36
从36号基地:
[s36.to_i(36).to_s(16)].pack 'H*'
Python Base64编码
Base64编码
base64.
b64encode
(s[, altchars])¶base64.
urlsafe_b64encode
(s)
This allows an application to e.g. generate URL or filesystem safe Base64 strings
由于标准的Base64编码后可能出现字符+
和/
而在URL中就不能直接作为参数
所以"url safe"的urlsafe_b64encode编码,就把字符+
和/
分别变成-
和_
base64.b64encode(''i\xb7\x1d\xfb\xef\xff'')
''abcd++//''
base64.urlsafe_b64encode(''i\xb7\x1d\xfb\xef\xff'')
''abcd--__''
由于=
字符也可能出现在Base64编码中,但=
用在URL、Cookie里面会造成歧义,因此,很多Base64编码后会把=
去掉
python 3中转码的方式
base64.urlsafe_b64encode(bytes(‘str’, "utf-8")
今天碰到的一个问题:
如何对一个数据结构 进行base64编码?
方法: json.dumps() 把一种数据结构转成 字符串类型。
然后再对使用 base64.编码
今天关于Python base 36编码和python编码大全的分享就到这里,希望大家有所收获,若想了解更多关于Base系列编码浅析【base16 base32 base64 base85 base36 base 58 base91 base 92 base62】、Hbase基础(二十一):python操作hbase之happybase、java – Base36编码一个字符串?、Python Base64编码等相关知识,可以在本站进行查询。
本文标签: