不同数据类型的操作___编码及解码

概述:

在写脚本中经常会获取到不同数据类型,有时候对一些数据类型判断、截取操作比较懵逼,所以先整理写常用的方法。

 

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'])

 

posted on 2020-11-11 12:07  chen_2987  阅读(210)  评论(0)    收藏  举报

导航