Python测试开发预习课9/10

1、json和xml

Json:javascript notation
json串:“{‘a’:1}”
看起来很像字典,但是实际上是个字符串,字典和字符串还可以互转。
例如:

>>> import json
>>> d={"a":100}
>>> json.dumps(d)
'{"a": 100}'
>>> s=json.dumps(d)#.dumps可以将字典转化为字符串
>>> s
'{"a": 100}'
>>> type(s)
<class 'str'>
>>> type(d)
<class 'dict'>
>>> s="{'a':1000}"
>>> s
"{'a':1000}"

在这里插入图片描述
与str的区别:

>>> d
{'a': 100}
>>> type(d)
<class 'dict'>
>>> str(d)
"{'a': 100}"
>>> d={"abc":None}
>>> json.dumps(d)
'{"abc": null}'
>>> str(d)
"{'abc': None}"

在这里插入图片描述
在这里插入图片描述

2、json和xml:都是用来存储数据的

json和xml:
json:javascript notation
json串:"{‘a’:1}"
看起来很像是个字典,但是实际是是个字符串
字典和字符串还可以互转。

json和xml:都是用来存储数据的。
restful接口,基本都用的是json来传输数据的。

xml:也可以用于传输数据。银行的老系统:soap协议:http+xml

python:字典、列表和元组,集合(存在内存里的格式)
,在网络上能被认出来么? 不能。因为没有编译器,认不出来的。
因为python的数据无法在网上做传输。

把想传输的数据转换为json就可以去传输数据了。

在网络上传输的数据:字符串

import json
data=[{'a':1,'b':2,'c':3,'d':4,'e':5}]
data2=json.dumps(data)
print(data2)

在这里插入图片描述

import json
data=[{'a':1,'b':2,'c':3,'d':4,'e':5}]
data2=json.dumps({'a':'Runoob','b':7},sort_keys=True,indent=4,separators=(',',':'))
print(data2)

在这里插入图片描述

>>> import json
>>> s={"x":1.234,"abc":None,"y":[2,3],"z":(1,2),"b":100}
>>> json.dumps(s)
'{"x": 1.234, "abc": null, "y": [2, 3], "z": [1, 2], "b": 100}'

在这里插入图片描述

>>> a = json.loads(s)
>>> a
{'x': 1.234, 'abc': None, 'y': [2, 3], 'z': [1, 2], 'b': 100}
>>> type(a)
<class 'dict'>

3、给你一个json串,需要转回为Python对象。如何判断json是个可以合法转回的合法json串。

import json
try:
    json.loads(xx)
except:
    print("是个非法的json串")
else:
print("是个合法的字符串")

在这里插入图片描述

s = {
    "labels":[

        {
            
          "name":"Audi_TTS_Coupe_2012",

          "x1":39,
          "y1":116,
          "x2":569,
          "y2":375
        
         }
    
                  ]
     
}

'''
{'labels': 
	[
	{'rect': 
		[
 			{'x': 39,
			 'y': 116
                                }, 
                        {'x': 569,
                        'y': 375}
                ] , 
        'labels': [
		{'value': 'Audi_TTS_Coupe_2012',
		 'key': 'default'}
                  ]
         }
         ]
}

'''

def convert(s):
    name = s["labels"][0]["name"]

    x1 =  s["labels"][0]["x1"]
    x2 =  s["labels"][0]["x2"]
    y1 =  s["labels"][0]["y1"]
    y2 =  s["labels"][0]["y2"]

    s1={
    "labels":[
        {
            "rect":[
                {
                    "x":"xx",
                    "y":"xx"                },
                {
                    "x":"xx",
                    "y":"xx"                }
            ],
            "labels":[
                {
                    "value":"xx",
                    "key":"default"
                }
            ]
        }
    ]
}

    s1["labels"][0]["rect"][0]["x"]=x1
    s1["labels"][0]["rect"][0]["y"]=y1
    s1["labels"][0]["rect"][1]["x"]=x2
    s1["labels"][0]["rect"][1]["y"]=y2

    s1["labels"][0]["labels"][0]["value"]=name

    return s1


print(convert(s))

在这里插入图片描述

>>> s = {    "labels":[
...         {
...           "name":"Audi_TTS_Coupe_2012",
...           "x1":39,
...           "y1":116,
...           "x2":569,
...           "y2":375
...          }
...                   ]
...      }
>>> s["labels"]
[{'name': 'Audi_TTS_Coupe_2012', 'x1': 39, 'y1': 116, 'x2': 569, 'y2': 375}]
>>> s["labels"][0]
{'name': 'Audi_TTS_Coupe_2012', 'x1': 39, 'y1': 116, 'x2': 569, 'y2': 375}
>>> s["labels"][0]["name"]
'Audi_TTS_Coupe_2012'
>>> s["labels"][0]["x1"]
39
>>> s["labels"][0]["y1"]
116

>>> name = s["labels"][0]["name"]
>>> name
'Audi_TTS_Coupe_2012'
>>> new_json = {"lable":[{"new_name":"xx"}]}
>>> new_json["lable"]
[{'new_name': 'xx'}]
>>> new_json["lable"][0]
{'new_name': 'xx'}
>>> new_json["lable"][0]["new_name"]=name
>>> new_json
{'lable': [{'new_name': 'Audi_TTS_Coupe_2012'}]}

>>> re.search(r"'name'",json.dumps(s))
>>> re.search(r"name",json.dumps(s))
<_sre.SRE_Match object; span=(14, 18), match='name'>
>>> re.search(r"name\"",json.dumps(s))
<_sre.SRE_Match object; span=(14, 19), match='name"'>
>>> re.search(r"name\":",json.dumps(s))
<_sre.SRE_Match object; span=(14, 20), match='name":'>
>>> re.search(r"name\":" ,json.dumps(s))
<_sre.SRE_Match object; span=(14, 20), match='name":'>
>>> re.search(r"name\": " ,json.dumps(s))
<_sre.SRE_Match object; span=(14, 21), match='name": '>
>>> re.search(r"name\": \"" ,json.dumps(s))
<_sre.SRE_Match object; span=(14, 22), match='name": "'>
>>> re.search(r"name\": \"\w+" ,json.dumps(s))
<_sre.SRE_Match object; span=(14, 41), match='name": "Audi_TTS_Coupe_2012'>
>>> re.search(r"name\": \"\w+\"" ,json.dumps(s))
<_sre.SRE_Match object; span=(14, 42), match='name": "Audi_TTS_Coupe_2012"'>
>>> re.search(r"name\": \"\w+\"" ,json.dumps(s)).group()
'name": "Audi_TTS_Coupe_2012"'
>>> re.search(r"name\": \"(\w+)\"" ,json.dumps(s)).group()
'name": "Audi_TTS_Coupe_2012"'
>>> re.search(r"name\": \"(\w+)\"" ,json.dumps(s)).group(1)
'Audi_TTS_Coupe_2012'


<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title="Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

4、movie :标签名

title=“Transformers”:属性
:子标签
标签中间的文字:Comedy,—》文本节点
解析:从文件中,通过分析文件,拿到我们想要的数据
文件通常要保存为utf-8格式
解析:三种方式
1 dom(把整个xml放到内存中使用)
效率高,但是浪费内存
2 sax(从xml文件中一行一行的去读,不会全部加载)
节省内存
3 etree
可以使用xpath方式定位,很方便。//movie[@title=“Ishtar”]
可能是类似第一种

>>> from xml.dom.minidom import parse
>>> import xml.dom.minidom
>>> DOMTree = xml.dom.minidom.parse("movies.xml")
>>> collection = DOMTree.documentElement
>>> collection
<DOM Element: collection at 0x26060e0>
>>> collection.getAttribute("shelf")
'New Arrivals'
>>> if collection.hasAttribute("shelf"):
...    print ("Root element : %s" % collection.getAttribute("shelf"))
...
Root element : New Arrivals

# 在集合中获取所有电影,从某个节点下,或者下面你的指定子节点
movies = collection.getElementsByTagName("movie")

>>> movies[0]
<DOM Element: movie at 0x2606508>
>>> movies[0]
<DOM Element: movie at 0x2606508>

>>> movies[0].toxml()
'<movie title="Enemy Behind">\n   <type>War, Thriller<hh>我们</hh></type>\n   <f
ormat>DVD</format>\n   <year>2003</year>\n   <rating>PG</rating>\n   <stars>10</
stars>\n   <description>Talk about a US-Japan war</description>\n</movie>'

找到这个标签description>Vash the Stampede!</description>里面的文本内容。

>>> movies[2]
<DOM Element: movie at 0x2606df0>
>>> movies[2].getElementsByTagName("description")
[<DOM Element: description at 0x2664210>]
>>> movies[2].getElementsByTagName("description")
[<DOM Element: description at 0x2664210>]
>>> movies[2].getElementsByTagName("description").childNodes
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NodeList' object has no attribute 'childNodes'
>>> movies[2].getElementsByTagName("description")[0]
<DOM Element: description at 0x2664210>
>>> movies[2].getElementsByTagName("description")[0].childNodes
[<DOM Text node "'Vash the S'...">]
>>> movies[2].getElementsByTagName("description")[0].childNodes[0]
<DOM Text node "'Vash the S'...">
>>> movies[2].getElementsByTagName("description")[0].childNodes[0].data
'Vash the Stampede!'

# 打印每部电影的详细信息
for movie in movies:
   print ("*****Movie*****")
   if movie.hasAttribute("title"):
      print ("Title: %s" % movie.getAttribute("title"))
 
   type = movie.getElementsByTagName('type')[0]
   print ("Type: %s" % type.childNodes[0].data)
   format = movie.getElementsByTagName('format')[0]
   print ("Format: %s" % format.childNodes[0].data)
   rating = movie.getElementsByTagName('rating')[0]
   print ("Rating: %s" % rating.childNodes[0].data)
   description = movie.getElementsByTagName('description')[0]
   print ("Description: %s" % description.childNodes[0].data)


movies[2]:表示取到第三个电影的dom element对象
getElementsByTagName('description'):获取第三个电影下的
名字叫做description的所有子dom element对象,返回的是个列表
.getElementsByTagName('description')[0]:从列表中去第一个对象
.childNodes:表示从description 的对象中找到所有子节点对象
             返回的是个列表
childNodes[0]:表示从列表中取第一个,对应的是文本节点
.data:把文件节点的文字内容取出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值