10-1 初識(shí)正則表達(dá)式
# 正則表達(dá)式
# JSON(XML)
什么是正則表達(dá)式?
正則表達(dá)式是一個(gè)特殊的字符串序列鹏倘,一個(gè)字符串是否與我們所設(shè)定的這樣的字符序列相匹配揍鸟。
快速檢索文本获列、實(shí)現(xiàn)一些替換文本操作
1.檢查一串?dāng)?shù)字是否是電話號(hào)碼
2.檢測(cè)一個(gè)字符串是否符合email
3.把一個(gè)文本里指定的單詞替換為另一個(gè)單詞。
# Q1:檢測(cè)下列字符串中是否含有Python案站?
a = 'c|c++|java|c#|python|iavascript'
print(a.index('python')>-1)#用Python的內(nèi)置函數(shù)index,這是方法一
print('python'in a)#這種方法也可以。打印結(jié)果如圖1
# 接下來(lái)看看如何用正則表達(dá)式檢測(cè)Python是否在字符串a(chǎn)里闪朱?
import re #python提供了一個(gè)re模塊,re模塊里提供了好多方法供我們操作正則表達(dá)式
a = 'c|c++|java|c#|python|iavascript'
r = re.findall('python',a)#這兩個(gè)參數(shù)第一個(gè)是要填入需要匹配的正則表達(dá)式钻洒,第二個(gè)是需要傳入所在字符串
print(r)
# 打印結(jié)果如圖2所示奋姿,是一個(gè)含有Python字符串的列表,返回的結(jié)果是常量字符串,看似毫無(wú)意義素标。正則表達(dá)式的
# 靈魂在于 規(guī)則 3剖!M吩狻寓免! 這個(gè)例子的規(guī)則抽象性太弱。很明確的告訴你计维,在字符串里找Python
# 看看完整的代碼
import re
a = 'c|c++|java|c#|python|iavascript'
r = re.findall('python',a)
if len(r) > 0:
print('字符串中含有Python') #打印結(jié)果如圖3
else:
print('NO')
image
image
image
10-2 元字符與普通字符
# Q1:如何提取下列字符串中的所有的數(shù)字袜香?
a = 'c0c++7java8c#9python6javascript'
# 看下列代碼
import re
a = 'c0c++7java8c#9python6javascript'
r = re.findall('\d',a) #0~9這些阿拉伯?dāng)?shù)字的正則表達(dá)式抽象就是“\d”
print(r)
# 打印結(jié)果如圖1
# 總結(jié)一下:10-1中的例子‘Python’是一個(gè)普通字符,‘\d’是一個(gè)元字符鲫惶,他們既可以單獨(dú)使用蜈首,也可以搭配使用
# 百度正則表達(dá)式會(huì)出現(xiàn)很多元字符,根據(jù)自己的業(yè)務(wù)需求決定總結(jié)要使用哪種元字符剑按!
# Q2:如何提取下列字符串中的所有字母疾就,將數(shù)字除掉?
a = 'c0c++7java8c#9python6javascript'
# 看下列代碼
import re
a = 'c0c++7java8c#9python6javascript'
r = re.findall('\D',a) # “\D”就是將數(shù)字去除
print(r)
# 打印結(jié)果如圖2
10-3 字符集
# 看看正則表達(dá)式的第一個(gè)模式:字符集
# 字符集
# Q1:找出字符串所給單詞中艺蝴,中間一個(gè)是c或者f的單詞b!猜敢?
import re
s = 'abc,acc,adc,aec,afc,ahc'
r = re.findall('a[cf]c',s)#字符集使用中括號(hào)姑荷,把需要抽象的字符集寫(xiě)在中括號(hào)里面:醒印!
# 中括號(hào)兩邊的字母起到定界的作用鼠冕!中括號(hào)里面的表示或的關(guān)系L硭隆!懈费!
print(r)#打印結(jié)果如圖1
# Q2:找出字符串所給單詞中计露,中間一個(gè)不是c不是f不是d的單詞!T饕摇票罐?
import re
s = 'abc,acc,adc,aec,afc,ahc'
r = re.findall('a[^cdf]c',s)#字符集使用中括號(hào),里面的向上的小箭頭表示取反的操作
print(r)#打印結(jié)果如圖2
# Q3:找出字符串所給單詞中泞边,找出中間一個(gè)是從c到f的單詞8醚骸!阵谚?
import re
s = 'abc,acc,adc,aec,afc,ahc'
r = re.findall('a[c-f]c',s)#這里如果寫(xiě)成r = re.findall('a[cdef]c',s)這也是正確的蚕礼,兩種表述都對(duì)!
print(r)#打印結(jié)果如圖3
image
image
image
10-4 概括字符集
# 概括字符集
# 目前所學(xué)習(xí)的兩個(gè) \d \D
# \w 匹配的都是單詞字符 \W表示非單詞字符梢什,如空格奠蹬,\n \t \r都是非單詞字符,用\W绳矩,在打印結(jié)果中都可以看到
# \s用來(lái)匹配空白字符如:\n \t \r (&除外不能匹配罩润,&有別于\n \t \r的特殊字符) \S用來(lái)匹配非空白字符
#補(bǔ)充一點(diǎn): . 匹配除換行符\n以外其他所有字符
# 看下列代碼
import re
a = 'python1111java678php'
r = re.findall('[0-9]',a) # 表示的意思是\d,打印的都是數(shù)字
print(r)
import re
a = 'python1111java678php'
r = re.findall('[^0-9]',a) # 表示的意思是\D翼馆,打印的都是字母
print(r)
# 上述打印結(jié)果如圖1
# Q1:在一個(gè)字符串中,想要匹配所有的數(shù)字和字母金度,怎么操作应媚?
import re
a = 'python1111java678php'
r = re.findall('[\w]',a) # \w,打印的都是字母和數(shù)字
print(r)
# 打印結(jié)果如圖2
# Q2:在一個(gè)字符串中猜极,想要匹配所有的數(shù)字和字母中姜,怎么操作?
import re
a = 'python1111java&678php'#在字符串中加入&,看看結(jié)果如何跟伏?
r = re.findall('[\w]',a) # \w丢胚,打印的都是字母和數(shù)字
print(r)
# 打印結(jié)果如圖2,跟圖2一樣
# \w 表示單詞字符受扳,意義如下:
import re
a = 'python1111java&678php'
r = re.findall('[A-Za-z0-9_]',a) # \w 表示就是中括號(hào)里面的[A-Za-z0-9_]意思是:大小寫(xiě)a-z携龟,數(shù)字0-9,還有下劃線
print(r)
# 看看下面的例子
import re
a = 'python1111java&678php___'
r = re.findall('[A-Za-z0-9_]',a) #相當(dāng)于 \w
print(r)
# 打印結(jié)果如圖3 勘高,看到了下劃線
# Q3:在一個(gè)字符串中峡蟋,想要匹配所有的非數(shù)字和字母坟桅,怎么操作?
import re
a = 'python1111java&678php'#在字符串中加入&,看看結(jié)果如何蕊蝗?
r = re.findall('[\W]',a) # \W仅乓,打印的都是非字母和數(shù)字
print(r)
# 打印結(jié)果如圖4
# Q4:在一個(gè)字符串中,想要匹配所有的空白字符蓬戚,怎么操作夸楣?
import re
a = 'python111\t1java\n&678php\r'
r = re.findall('[\s]',a) # \s,打印的都是空白字符
print(r)
# 打印結(jié)果如圖5
image
image
image
image
image
10-5 數(shù)量詞
10-6 貪婪與非貪婪
#數(shù)量詞
# Q1:在一個(gè)字符串中子漩,想要匹配所有的字母豫喧,怎么操作?
import re
a = 'python1111java678php'
r = re.findall('[a-z]',a) # a-z打印所有的字母
print(r)
# 打印結(jié)果如圖1
# Q2:在一個(gè)字符串中痛单,想要匹配所有的完整的單詞嘿棘,怎么操作?
import re
a = 'python1111java678php'
r = re.findall('[a-z]{3}',a) # [a-z]{3}表示單詞以3個(gè)一組出現(xiàn)
print(r)
# 打印結(jié)果如圖2旭绒,結(jié)果2中都是3個(gè)一組鸟妙,并不是完整的字母,怎么辦挥吵?
# Q3:在一個(gè)字符串中重父,想要匹配所有的完整的單詞,怎么操作忽匈?
import re
a = 'python1111java678php'
r = re.findall('[a-z]{3,6}',a) # [a-z]{3,6}表示單詞出現(xiàn)的形式房午,最少以3個(gè)字母,最多以6個(gè)字母出現(xiàn)丹允。字母乘以數(shù)量的形式郭厌。
print(r)
# 打印結(jié)果如圖3,是我們想要的結(jié)果
# 貪婪與非貪婪
# 在Python中雕蔽,默認(rèn)的是貪婪的匹配方式折柠。看個(gè)例子
import re
a = 'python1111java678php'
r = re.findall('[a-z]{3,6}',a)
print(r)
# 根據(jù)圖3的打印結(jié)果批狐,當(dāng)匹配到3個(gè)字母的時(shí)候扇售,輸出也是正確的,只不過(guò)Python采用的貪婪的匹配方式嚣艇,會(huì)盡量多的往下匹配
# 來(lái)看下非貪婪的匹配
import re
a = 'python1111java678php'
r = re.findall('[a-z]{3,6}?',a) #[a-z]{3,6}?加這個(gè)問(wèn)號(hào)就表示非貪婪的匹配
print(r)
# 打印結(jié)果如圖4承冰,這種非貪婪的匹配方式,跟{3}的匹配方式相同食零!
image
image
image
image
10-7 匹配0次1次或者無(wú)限多次
# 數(shù)量詞
# * 匹配*前面的字符0次或者無(wú)限多次
# + 匹配*前面的字符1次或者無(wú)限多次
# ? 匹配困乒?前面的字符0次或者1次
import re
a = 'pytho0python1pythonn2'
r = re.findall('python*',a) # 用* ,匹配*前面的字符0次或者無(wú)限多次
print(r)
# 打印結(jié)果如圖1
# + 匹配*前面的字符1次或者無(wú)限多次
import re
a = 'pytho0python1pythonn2'
r = re.findall('python+',a) # 用+ 慌洪,匹配+前面的字符1次或者無(wú)限多次
print(r)
# 打印結(jié)果如圖2
# ? 匹配顶燕?前面的字符0次或者1次
import re
a = 'pytho0python1pythonn2'
r = re.findall('python?',a) # 用凑保? ,匹配涌攻?前面的字符0次或者1次
print(r)
# 打印結(jié)果如圖3 ,打印第三個(gè)Python的時(shí)候欧引,雖然是pythonn,但是打印出來(lái)的仍然是Python恳谎,
# 只是匹配了0次或者1次芝此,多余的n都會(huì)被略去
# 在和貪婪與非貪婪中的?相比較的時(shí)候因痛,貪婪與非貪婪出現(xiàn)的是范圍婚苹,加問(wèn)號(hào)表示非貪婪
# 這里表示:匹配?前面的字符0次或者1次
# 看看下面三段代碼的意義和結(jié)果
import re
a = 'pytho0python1pythonn2'
r = re.findall('python?',a) # 用鸵膏? 膊升,匹配?前面的字符0次或者1次
print(r)
import re
a = 'pytho0python1pythonn2'
r = re.findall('python{1,2}?',a) # 用python{1,2}?表示非貪婪
print(r)
import re
a = 'pytho0python1pythonn2'
r = re.findall('python{1,2}',a) # 用python{1,2}表示貪婪
print(r)
# 打印結(jié)果如圖4谭企,三段代碼的結(jié)果截然不同廓译,意義不一樣
image
image
image
image
10-8 邊界匹配符
# 邊界匹配
# Q1:怎么判斷一個(gè)QQ號(hào)碼在4~8位之間?
import re
a = '100001'
r = re.findall('\d{4,8}',a)#用此種方法可以判斷出來(lái)
print(r)
# 打印結(jié)果如圖1
# Q2:怎么判斷一個(gè)QQ號(hào)碼在4~8位之間债查?
import re
a = '101'
r = re.findall('\d{4,8}',a)#用此種方法可以判斷出來(lái)
print(r)
# 打印結(jié)果如圖2
# Q3:怎么判斷一個(gè)QQ號(hào)碼在4~8位之間非区?
import re
a = '100000001'
r = re.findall('\d{4,8}',a)#用此種方法可以判斷出來(lái)
print(r)
# 打印結(jié)果如圖3
# Q4:如何完全匹配一個(gè)QQ號(hào)碼?要用到邊界匹配了盹廷,如果一個(gè)QQ號(hào)碼在4-8位之間征绸,下面能匹配嗎?
import re
a = '100000001'
r = re.findall('^\d{4,8}$',a)#用^\d{4,8}$前面加上^俄占,表示從開(kāi)始匹配,后面加上一個(gè)$,代表從后面開(kāi)始匹配管怠。一前一后表示完全匹配這個(gè)字符串
print(r)
# 打印結(jié)果如圖4,結(jié)果是空的列表缸榄。無(wú)法匹配4-8的號(hào)碼
# 看看下列代碼排惨,深入理解邊界匹配!
import re
a = '100000001'
r = re.findall('000',a)#用此種方法可以判斷出來(lái)
print(r)
# 打印結(jié)果如圖5碰凶,兩組000
import re
qq = '100000001'
r = re.findall('^000',a)#在000前面加一個(gè)向上的^
print(r)
# 打印結(jié)果是空列表,因?yàn)閺拈_(kāi)始匹配的數(shù)字是1鹿驼,不是0欲低,所以打印的是空列表
import re
qq = '100000001'
r = re.findall('000$',a)#在000的后面加上一個(gè)$
print(r)
# 打印結(jié)果是空列表,因?yàn)閺哪┪查_(kāi)始匹配的三個(gè)字母必須是000畜晰,但是目前的001砾莱,所以不匹配!所以打印的是空列表
10-9 組
# 組的概念 一個(gè)小括號(hào)就代表一個(gè)組
# Q1:判斷一個(gè)字符串里是否包含3個(gè)Python凄鼻?腊瑟!
import re
a = 'pythonpythonpythonpythonpython'
r = re.findall('pythonpythonpython',a)#這種方法是可行的
print(r)
# 打印結(jié)果如圖1
# 看看方法二
import re
a = 'pythonpythonpythonpythonpython'
r = re.findall('(python){3}',a)#(python)聚假,加上(),代表就是一個(gè)組闰非,()里的內(nèi)容是且的關(guān)系膘格,【】里的是或的關(guān)系
print(r)
image
10-10 匹配模式參數(shù)
# 10-10 匹配模式參數(shù)
import re
lanuage = 'pythonC#javaphp'
r = re.findall('c#',lanuage)#將小寫(xiě)的c#看看打印出來(lái)的是啥?
print(r)
# 打印結(jié)果如圖1财松,是一個(gè)空列表瘪贱,因?yàn)閰^(qū)分大小寫(xiě)
# 那么有沒(méi)有一種方法可以忽略大小寫(xiě)呢?看看下面的例子
import re
lanuage = 'pythonC#javaphp'
r = re.findall('c#',lanuage,re.I)#第三個(gè)參數(shù)就是flags辆毡,就是指的就是匹配模式
print(r)
# 打印結(jié)果如圖2菜秦,打印出來(lái)了
# 第三個(gè)參數(shù)里面的re.I可以忽略大小寫(xiě)
# 還有一個(gè)就是re.S,匹配所有字符包括換行符2耙础G蜃颉!
# 看例子
import re
lanuage = 'pythonC#\njavaphp'
r = re.findall('c#.{1}',lanuage,re.I)#c#.{1}表示首先匹配c#任意的一個(gè)字符眨攘,包括換行符
print(r)
# 這樣什么都打印不出來(lái)主慰。正確的結(jié)果如下圖
import re
lanuage = 'pythonC#\njavaphp'
r = re.findall('c#.{1}',lanuage,re.I | re.S)#c#.{1}表示首先匹配c#任意的一個(gè)字符,包括換行符,re.S期犬,匹配所有字符包括換行符:友啤!龟虎!
print(r)
# 打印結(jié)果如圖3
# re.I | re.S(這是且的關(guān)系璃谨,既要忽略大小寫(xiě),又要支持對(duì)點(diǎn)號(hào)行為的改變鲤妥,兩個(gè)同時(shí)滿足佳吞,若果有需要,可以加豎線然后后面接著寫(xiě))
image
image
image
10-11 re.sub正則替換
# 10-11 re.sub正則替換
# 正則表達(dá)式中棉安,并不是僅僅只有re一個(gè)模塊底扳,本章介紹re.sub
# 看例子
# re.findall用于查找,今天所講的re.sub用于替換
import re
lanuage = 'pythonC#javaphp'
r = re.sub('C#','GO',lanuage)#注意re.sub的幾個(gè)參數(shù)的意義
print(r)
# 打印結(jié)果如圖1
import re
lanuage = 'pythonC#javaC#phpC#'
r = re.sub('C#','GO',lanuage,0)#注意re.sub的0的意義表示無(wú)限制的匹配下去贡耽,不管多少C#衷模,全部都會(huì)被替換
print(r)
# 打印結(jié)果如圖2
import re
lanuage = 'pythonC#javaC#phpC#'
r = re.sub('C#','GO',lanuage,1)#注意re.sub的1的意義表示只有字符串中第一個(gè)C#會(huì)被替換
print(r)
# 打印結(jié)果如圖3
# 看看下面的替換方法
import re
lanuage = 'pythonC#javaC#phpC#'
lanuage.replace('C#','GO')
print(lanuage)
# 打印結(jié)果如圖4,發(fā)現(xiàn)并沒(méi)有實(shí)現(xiàn)替換!原因是字符串是不可變得蒲赂,lanuage.replace('C#','GO')需要接收一下變量
# lanuage = lanuage.replace('C#','GO')即可
# re.sub強(qiáng)大的地方是第二個(gè)參數(shù)可以是個(gè)函數(shù):看下面例子
import re
lanuage = 'pythonC#javaC#phpC#'
def convert(value):
pass
r = re.sub('C#',convert,lanuage)
print(r)
# 打印結(jié)果如圖5,C#消失不見(jiàn)了阱冶,是因?yàn)楸缓瘮?shù)里的空字符串替代了
# 繼續(xù)看例子
import re
lanuage = 'pythonC#javaC#phpC#'
def convert(value):
return '!!' + value + '!!'
r = re.sub('C#',convert,lanuage)
print(r)
# 打印結(jié)果如圖6,出現(xiàn)了報(bào)錯(cuò),下面分析一下報(bào)錯(cuò)的原因:
import re
lanuage = 'pythonC#javaC#phpC#'
def convert(value):#字符串并不會(huì)直接傳到convert里面
print(value)
#return '!!' + value + '!!'
r = re.sub('C#',convert,lanuage)
print(r)
# 打印結(jié)果如圖7
# 看看正確的代碼:
import re
lanuage = 'pythonC#javaC#phpC#'
def convert(value):#字符串并不會(huì)直接傳到convert里面
matched = value.group()#拿到匹配結(jié)果
return '!!' + matched + '!!'
r = re.sub('C#',convert,lanuage)
print(r)
# 打印結(jié)果如圖8滥嘴,成功打印
image
image
image
image
image
image
image
image
10-12 把函數(shù)作為參數(shù)傳遞
# 10-12 把函數(shù)作為參數(shù)傳遞
# Q1:有一個(gè)字符串木蹬,找出里面所有的數(shù)字,凡是大于6的若皱,全部替換成9镊叁,凡是小于6的尘颓,全部替換成0
import re
s = 'A8C3721D86'
def convert(value):
matched = value.group()
if matched >=6:
return 9
else:
return 0
r = re.sub('\d',convert,s)#首先拿到數(shù)字
print(r)
# 打印結(jié)果如圖1,是報(bào)錯(cuò)的
# 正確的如下:
import re
s = 'A8C3721D86'
def convert(value):
matched = value.group()
if int(matched) >=6:
return '9'
else:
return '0'
r = re.sub('\d',convert,s)#首先拿到數(shù)字
print(r)
# 打印結(jié)果如圖2晦譬,正確的
image
image
10-13 search與match函數(shù)
# 10-13 search與match函數(shù)
# findall search match疤苹,參數(shù)都是一樣的,來(lái)看看match和search之間的不同
import re
s = 'A8C3721D86'
r = re.match('\d',s)
print(r)
# 打印結(jié)果如圖1蛔添,沒(méi)有匹配到結(jié)果
# 看看search
import re
s = 'A8C3721D86'
r = re.search('\d',s)
print(r)
# 打印結(jié)果如圖2痰催,匹配到一個(gè)結(jié)果
# 導(dǎo)致返回結(jié)果不同的原因是:match是從首字母匹配的,search是全部搜索型的S啤?淙堋!凶硅,若將字符串第一個(gè)字母去掉
# 他們的輸出結(jié)果是一樣的
# 拿到返回結(jié)果
import re
s = '8C3721D86'
r = re.search('\d',s)
print(r.group())
# 打印結(jié)果如圖3
import re
s = '8C3721D86'
r = re.match('\d',s)
print(r.span())#返回結(jié)果的位置
# 打印結(jié)果如圖4
# findall會(huì)將所有的數(shù)字都打印出缝裁,這就是三者的不同點(diǎn)!
image
image
image
image
10-14 group分組
# 10-14 group分組
# Q1:下面的字符串足绅,如何提取life和Python之間的字母捷绑?
import re
s = 'life is short ,i use python'
r = re.search('(life.*python)',s)#點(diǎn)和星號(hào)的作用10-4中有講
print(r.group())#group的意義在于獲得一個(gè)分組的匹配,group里面的一個(gè)分組0氢妈,可以省略4馕邸!
# group(0)是一個(gè)特殊的匹配結(jié)果首量,返回的都是完整的結(jié)果
# 打印結(jié)果如圖1
import re
s = 'life is short ,i use python'
r = re.search('life(.*)python',s)
print(r.group(1))#group填寫(xiě)1壮吩,從1開(kāi)始接收返回結(jié)果
# 打印結(jié)果如圖2
#看看search和findall之間進(jìn)行比較
import re
s = 'life is short ,i use python'
r = re.findall('life(.*)python',s)
print(r)
# 打印結(jié)果如圖3
# 看看多個(gè)分組的情況!<釉怠Q夹稹!
# Q2:下面的字符串拣宏,如何提取life和Python以及Python和Python之間的字母沈贝?
import re
s = 'life is short ,i use python,i love python'
r = re.search('life(.*)python(.*)python',s)
print(r.group(0))#group填寫(xiě)0
print(r.group(1))#group填寫(xiě)1
print(r.group(2))#group填寫(xiě)2
# 打印結(jié)果如圖4
# 上述情況和下面的是一樣的
import re
s = 'life is short ,i use python,i love python'
r = re.search('life(.*)python(.*)python',s)
print(r.group(0,1,2))
# 打印結(jié)果如圖5
# 看看groups的情況吧
import re
s = 'life is short ,i use python,i love python'
r = re.search('life(.*)python(.*)python',s)
print(r.groups())#groups不會(huì)返回完整的結(jié)果,只會(huì)返回要匹配的中間結(jié)果勋乾!也就是括號(hào)括起來(lái)的結(jié)果
# 打印結(jié)果如圖6
image
image
image
image
image
image
0-15 一些關(guān)于學(xué)習(xí)正則的建議
10-16 理解JSON
什么是JSON?
JavaScript Object Notation
JavaScript對(duì)象標(biāo)記
JSON:是一種輕量級(jí)的數(shù)據(jù)交換格式
易于閱讀
易于解析
網(wǎng)絡(luò)傳輸效率高
跨語(yǔ)言交換數(shù)據(jù)
10-17 反序列化
# 10-17 反序列化
# Q1:把已知的字符串轉(zhuǎn)換成我們熟悉的Python字符串宋下?(這個(gè)過(guò)程叫做反序列化)
import json
json_str = '{"name":"xiaoyu","age":18}' #json格式要求字符串必須加雙引號(hào)
student = json.loads(json_str)
print(type(student))
print(student)
# 打印結(jié)果如圖1所示,是字典的形式
import json
json_str = '{"name":"xiaoyu","age":18}'
student = json.loads(json_str)
print(type(student))
print(student)
print(student['name'])
print(student['age'])#通過(guò)這種訪問(wèn)方式可以非訪問(wèn)json中辑莫,我們想要的結(jié)果
# 打印結(jié)果如圖2所示
# json的數(shù)據(jù)格式類型是對(duì)象形式杨凑,轉(zhuǎn)換成Python里的字典數(shù)據(jù)類型
# json的數(shù)據(jù)格式類型是數(shù)組形式,轉(zhuǎn)換成Python里的什么數(shù)據(jù)類型摆昧??蜒程?看代碼I鹉恪K帕薄(答案是列表類型)
import json
json_str = '[{"name":"xiaoyu","age":18},{"name":"xiaoyu","age":18}]' #json的數(shù)組類型
student = json.loads(json_str)
print(type(student))
print(student)
# 打印結(jié)果如圖3 4所示,是列表的形式
#還有bool類型的情況
import json
json_str = '[{"name":"xiaoyu","age":18,"flag":false},{"name":"xiaoyu","age":18}]' #json的數(shù)組類型
student = json.loads(json_str)
print(type(student))
print(student)
# 打印結(jié)果如圖5忌锯,結(jié)果是大寫(xiě)的false
# json有自己的數(shù)據(jù)類型伪嫁,我們用json.loads函數(shù)把json數(shù)據(jù)類型轉(zhuǎn)換成我們所需要的類型。這個(gè)過(guò)程叫做反序列化
10-18 序列化
# 10-18 序列化
# 左邊是json格式類型對(duì)應(yīng)到右邊的Python格式類型
json python
object dict
array list
string str
number int
number float
true True
false False
null None
# 看看序列化的過(guò)程偶垮,就是把Python的數(shù)據(jù)類型轉(zhuǎn)換成json的數(shù)據(jù)類型
# Q1:把Python中的字典類型轉(zhuǎn)換成json里的形式张咳?
import json
student = [
{'name':'xiaoyu','age':18,'flag':False},
{'name':'xiaoyu','age':18}
]
json_str = json.dumps(student)#json.dumps序列化的過(guò)程
print(type(json_str))
print(json_str)
# 打印結(jié)果如圖1,就是json格式
image
10-19 小談JSON似舵、JSON對(duì)象與JSON字符串
10-19 小談JSON脚猾、JSON對(duì)象與JSON字符串
JSON:數(shù)據(jù)交換格式
JSON對(duì)象
image
image
作者:buaishengqi
鏈接:http://www.reibang.com/p/dd37dc147f4a
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處砚哗。