不同数据类型的操作___编码及解码
概述:
在写脚本中经常会获取到不同数据类型,有时候对一些数据类型判断、截取操作比较懵逼,所以先整理写常用的方法。
1.变量的类型:
url='www.hao123.com' #获取变量类型 print(eval(str(type(url)).split()[1][:-1])) #判断变量是否为str print(isinstance(url,str))
2.str处理:
#!/usr/bin/env python # -*- coding: utf-8 -*- url='www.hao123.com' #______________判断字符串是否包含指定字符__的三种方法____________________________ #方式一 print(url.__contains__("hao123")) #方式二 print(True if url.find('hao123') !=-1 else False) #方式三 print(True if 'hao123' in url else False) #_____________________________字符串截取________________________________________ print(url[:2]) #获取前2位 print(url[2:]) #从第2位向后显示 print(url[2:6]) #显示2到6位(不包含第6位) print(url[:-2]) #不显示后2位 print(url[-3:]) #只显示后3位 ########################## chen='chenwei123456789' #获取步长值,增长为3 print(chen[::3])#从左侧开始,间隔3取值一次(包含第三位) print(chen[::-3])#从右侧倒着取值 #_________________________字符串替换/过滤_______________________________________ '''replace('原字符',替换字符)''' #把指定字符串替换空(相当于删除的意思) print(url.replace('123','')) #替换指定字符 print(url.replace('123','5656')) #________________________________分割_______________________________________________ #以逗号分割字符串 print(url.split('.')) #以逗号分割字符串,返回的最大长度为1 print(url.split('.',1)) ###按字母分割 print(url.split('h')) #______________________通用___________________________________________________________ print(url.count('com')) #统计字符串中com的次数
3.list处理:
chen_list=['dalan_test','ceshi002','dalao_hallo','hallo_word','test_0265','www.baidu'] #________________切片_________________________________________________________ #显示1到6的元素 print(chen_list[1:3]) #获取前3个元素 print(chen_list[:-3]) #获取后3个元素 print(chen_list[-3:]) #______________________list转str___________________________________________ chen_str=''.join(chen_list) print(chen_str) #______________________判断list是否包含某个元素____________________________ #方法一 for i in chen_list: if 'hallo_word' == i: print(i) #方法二 lst = [i for i in chen_list if i == 'hallo_word'] print(lst) #方法三 print(chen_list.__contains__('ceshi002')) #___________________判断列表元素内 是否包含指定字符______________________ a3 = [i for i in chen_list if 'test' in i] print('包含test的元素有',a3) #____________________________二维(嵌套)列表转字典_________________________________ bb=[('user','dalan_test'),('password','123456'),('age','27')] #方式一 print(dict(bb)) #方式二 a= eval('[%s]'%repr(bb).replace('[', '').replace(']', '')) print(dict(a))
#________________________________两个list转字典____________________________________ a=['chen','gege','game','pppppppppppp']; b=['wowo','nihao','dalan','test'] print(dict(zip(a,b)))
4.dict处理:
db = {'chen':'123545','test':'dalan001','ceshi':'hhh'}
#_______________________判断某个键/key是否在字典中_________________________
#方式一
print(db.__contains__('test'))
#方式二
print( True if 'test22' in db else False)
#_______________________遍历字典的键和值___________________________________
for (key,value) in db.items():
print("这是%s:"%(key),value)
#________________获取字典的键或值(展示list)___________________________________________
#获取字典所有键
aa=list(db.keys())
print('字典所有的key:',aa)
#获取字典所有值
aa1=list(db.values())
print('字典所有的value',aa1)
#_______________________________________两个list合并成字典____________________________________
list1=['name','age','height'];list2=['李光浩','25','168cm','test_test']
#两个list合并成字典
print(dict(zip(list1,list2)))#当两个list元素数量不一致时,取最小
#以二维列表返回可遍历的(键, 值) 元组数组
print(list(db.items()))
#_______________________判断两个字典的键、值是否一样__________________________________________
import operator
test_db = {'chen':'123545','test':'dalan001','ceshi':'hhh'}
print(operator.eq(db, test_db)) #eq是比较两个字典的元素是否一致(python和python3不同,python2用cmp())
#________________字典常用函数_________________________________________________________________
print(len(db))#计算字典元素个数,即键的总数
print(str(db))#以字符串的方式打印字典
print ("Value:%s" %db.get('chen', None))#返回指定键的值,如果值不在字典中返回none
print ("Value:%s" %db.setdefault('chen1', None))#如果键不已经存在于字典中,将会添加键并将值设为默认值
#print ("Value : %s" % db.has_key('a'))#python2(如果键在字典里返回true,否则false)
#______________________________________本质操作_________________________________________________
db['test12']='新增数据' #字典追加
print(db)
del db['chen']#删除字典某个key
db.clear()#清空字典
#___________________________________字典转list的方法______________________________________________
a = {'a' : 1, 'b': 2, 'c' : 3}
#字典中的key转换为列表
key_value = list(a.keys())
print('字典中的key转换为列表:', key_value)
#字典中的value转换为列表
value_list = list(a.values())
print('字典中的value转换为列表:', value_list)
#__________________________________字典排序后转成list_____________________________________________
aa= {"2022-03-16": 6, "2022-03-15": 7, "2022-03-13": 6, "2022-03-14": 6}
bb=sorted(aa.keys(),reverse=False)#对字典的key排序,False表示升序,True表示降序
cc=sorted(aa.items(),reverse=False)#对整个字典排序
print(cc)
dict_key=[i[0] for i in cc ]#获取排序后的key
dict_value=[i[1] for i in cc ]#获取排序后的key
print('排序后的key',dict_key)
print('排序后的value',dict_value)
5.字符编码解码
#!/usr/bin/env python # -*- coding: utf-8 -*- import chardet #_____________________________________查看编码类型________________________________________________________________________________ # str1 = "菜鸟教程发件人费" # print(chardet.detect(str1.encode())["encoding"]) # print(chardet.detect(str1.encode())) #________________________________编码:encode_________________________________________________________________________________________ ############将字符串转换成gbk编码格式 #方式1: 通过encode方法进行 bb1 = '冬季爱的我520'.encode("GBK") print(type(bb1))# <class 'bytes'> print(bb1)# b'\xb6\xac\xbc\xbe\xb0\xae\xb5\xc4\xce\xd2520' #方式2: 通过bytes类型 print(bytes('冬季爱的我520'.encode('GBK')))# b'\xb6\xac\xbc\xbe\xb0\xae\xb5\xc4\xce\xd2520' ##########将字符串转换成gb18030编码格式 #方式1: 通过encode方法进行 bb2='中文数字'.encode('gb18030') print(type(bb2))# <class 'bytes'> print(bb2)# b'\xd6\xd0\xce\xc4\xca\xfd\xd7\xd6' #方式2: 通过bytes类型 print(bytes('中文数字'.encode('gb18030')))# b'\xd6\xd0\xce\xc4\xca\xfd\xd7\xd6' #########将字符串转换成Unicode编码格式 #方式1: 通过encode方法进行 bb3='测试抓夹56233'.encode('unicode_escape') print(type(bb3))# <class 'bytes'> print(bb3)# b'\\u6d4b\\u8bd5\\u6293\\u593956233' #方式2: 通过bytes类型 print(bytes('测试抓夹56233'.encode('unicode_escape')))# b'\\u6d4b\\u8bd5\\u6293\\u593956233' #########将字符串转换成UTF-8编码格式 #方式1: 通过encode方法进行 bb4='测试菜单夹33'.encode('utf-8') print(type(bb4))# <class 'bytes'> print(bb4)# b'\xe6\xb5\x8b\xe8\xaf\x95\xe8\x8f\x9c\xe5\x8d\x95\xe5\xa4\xb933' #方式2: 通过bytes类型 print(bytes('测试菜单夹33', 'utf-8'))# b'\xe6\xb5\x8b\xe8\xaf\x95\xe8\x8f\x9c\xe5\x8d\x95\xe5\xa4\xb933' #______________________________________________decode:解码______________________________________________________________________________ ''''编码和解码需要一致,不然就会报错''' #通过gbk解码 str1=b'\xb6\xac\xbc\xbe\xb0\xae\xb5\xc4\xce\xd2520'.decode('gbk') print(str1) #通过gb18030解码 chen=b'\xd6\xd0\xce\xc4\xca\xfd\xd7\xd6' str2=chen.decode('gb18030') print(str2) # str3=bb1.decode('utf-8') #通过utf-8d解密就会报错(因为编码和解码不一致) # print(str3) #通过Unicode解码 str4=b'\\u6d4b\\u8bd5\\u6293\\u593956233'.decode('unicode_escape') print(str4) #通过utf-8解码 str5= b'\xe6\xb5\x8b\xe8\xaf\x95\xe8\x8f\x9c\xe5\x8d\x95\xe5\xa4\xb933'.decode('utf-8') print(str5) # #____________________________________________________bytes字节与string字符串转换______________________________________________________ str1 = '元宇宙会导致人类文明的停滞吗?' ##字符串转为bytes b3 = str1.encode('UTF-8')#编码 print(b3) ##指定字符集bytes(字符串转bytes) b2 = bytes(str1, encoding='UTF-8') print(b2) print(type(b2)) b22=b'\xe5\x85\x83\xe5\xae\x87\xe5\xae\x99\xe4\xbc\x9a\xe5\xaf\xbc\xe8\x87\xb4\xe4\xba\xba\xe7\xb1\xbb\xe6\x96\x87\xe6\x98\x8e\xe7\x9a\x84\xe5\x81\x9c\xe6\xbb\x9e\xe5\x90\x97\xef\xbc\x9f' ## bytes转为字符串方法1 str2 = str(b22, 'UTF-8') print(str2) ## bytes转为字符串方法2 str3 = b22.decode('UTF-8')#解码 print(str3) print(type(str3)) #___________________________decode解码____把bytes字节流解码成str_________________________________________________________________________ str8='ddjkdow对对对对对对多多' print("UTF-8 编码:", str8.encode('UTF-8'))#解码时编码需要一致 #print("UTF-8 解码:", str8.decode('UTF-8'))#解码时编码需要一致 #___________________________解码和编码混合一起______________________________________________________________________________________________ s = '你好' # 字符串s已经是unicode编码,无需decode,直接encode s_to_gbk = s.encode("gbk") print('编码为gbk=',s_to_gbk) #先解码成gbk(unicode),再编码成utf-8 gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") print(gbk_to_utf8) #解码成unicode字符编码 utf8_decode = gbk_to_utf8.decode("utf-8") print(utf8_decode) #____________________________________判断接口返回的编码___________________________________________________________________________________ import urllib.request url = 'http://tools.2345.com/licai/bank.php?atm_bank=%B9%A4%C9%CC%D2%F8%D0%D0&atm_province=5&atm_city=0&p=1' a = urllib.request.urlopen(url) print((chardet.detect(a.read()))['encoding'])
浙公网安备 33010602011771号