diff --git a/Day01-15/Appendix-B/chatclient.py b/Day01-15/Appendix-B/chatclient.py
deleted file mode 100644
index 4d53e7cdb94d5337c98b6b88c53ec54078eee122..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/chatclient.py
+++ /dev/null
@@ -1,34 +0,0 @@
-from socket import socket
-from threading import Thread
-
-
-def main():
-
- class RefreshScreenThread(Thread):
-
- def __init__(self, client):
- super().__init__()
- self._client = client
-
- def run(self):
- while running:
- data = self._client.recv(1024)
- print(data.decode('utf-8'))
-
- nickname = input('请输入你的昵称: ')
- myclient = socket()
- myclient.connect(('10.7.189.118', 12345))
- running = True
- RefreshScreenThread(myclient).start()
- while running:
- content = input('请发言: ')
- if content == 'byebye':
- myclient.send(content.encode('utf-8'))
- running = False
- else:
- msg = nickname + ': ' + content
- myclient.send(msg.encode('utf-8'))
-
-
-if __name__ == '__main__':
- main()
diff --git a/Day01-15/Appendix-B/chatserver.py b/Day01-15/Appendix-B/chatserver.py
deleted file mode 100644
index aeab5bf59dec5bc0d8e7073a0ef1d66e0de8b2e4..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/chatserver.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from socket import socket
-from threading import Thread
-
-
-def main():
-
- class ClientHandler(Thread):
-
- def __init__(self, client):
- super().__init__()
- self._client = client
-
- def run(self):
- try:
- while True:
- try:
- data = self._client.recv(1024)
- if data.decode('utf-8') == 'byebye':
- clients.remove(self._client)
- self._client.close()
- break
- else:
- for client in clients:
- client.send(data)
- except Exception as e:
- print(e)
- clients.remove(self._client)
- break
- except Exception as e:
- print(e)
-
- server = socket()
- server.bind(('10.7.189.118', 12345))
- server.listen(512)
- clients = []
- while True:
- curr_client, addr = server.accept()
- print(addr[0], '连接到服务器.')
- clients.append(curr_client)
- ClientHandler(curr_client).start()
-
-
-if __name__ == '__main__':
- main()
diff --git a/Day01-15/Appendix-B/fileclient.py b/Day01-15/Appendix-B/fileclient.py
deleted file mode 100644
index 8c326697dd5694f0f1f89dcd4daafc063fa2b173..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/fileclient.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from socket import socket
-from json import loads
-from base64 import b64decode
-
-
-def main():
- client = socket()
- client.connect(('192.168.1.2', 5566))
- # 定义一个保存二进制数据的对象
- in_data = bytes()
- # 由于不知道服务器发送的数据有多大每次接收1024字节
- data = client.recv(1024)
- while data:
- # 将收到的数据拼接起来
- in_data += data
- data = client.recv(1024)
- # 将收到的二进制数据解码成JSON字符串并转换成字典
- # loads函数的作用就是将JSON字符串转成字典对象
- my_dict = loads(in_data.decode('utf-8'))
- filename = my_dict['filename']
- filedata = my_dict['filedata'].encode('utf-8')
- with open('/Users/Hao/' + filename, 'wb') as f:
- # 将base64格式的数据解码成二进制数据并写入文件
- f.write(b64decode(filedata))
- print('图片已保存.')
-
-
-if __name__ == '__main__':
- main()
diff --git a/Day01-15/Appendix-B/fileserver.py b/Day01-15/Appendix-B/fileserver.py
deleted file mode 100644
index dac241ae8fe21b928d2161ed65442ae4797337f5..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/fileserver.py
+++ /dev/null
@@ -1,46 +0,0 @@
-from socket import socket, SOCK_STREAM, AF_INET
-from base64 import b64encode
-from json import dumps
-from threading import Thread
-
-
-def main():
-
- # 自定义线程类
- class FileTransferHandler(Thread):
-
- def __init__(self, cclient):
- super().__init__()
- self.cclient = cclient
-
- def run(self):
- my_dict = {}
- my_dict['filename'] = 'guido.jpg'
- # JSON是纯文本不能携带二进制数据
- # 所以图片的二进制数据要处理成base64编码
- my_dict['filedata'] = data
- # 通过dumps函数将字典处理成JSON字符串
- json_str = dumps(my_dict)
- # 发送JSON字符串
- self.cclient.send(json_str.encode('utf-8'))
- self.cclient.close()
-
- # 1.创建套接字对象并指定使用哪种传输服务
- server = socket()
- # 2.绑定IP地址和端口(区分不同的服务)
- server.bind(('192.168.1.2', 5566))
- # 3.开启监听 - 监听客户端连接到服务器
- server.listen(512)
- print('服务器启动开始监听...')
- with open('guido.jpg', 'rb') as f:
- # 将二进制数据处理成base64再解码成字符串
- data = b64encode(f.read()).decode('utf-8')
- while True:
- client, addr = server.accept()
- # 用一个字典(键值对)来保存要发送的各种数据
- # 待会可以将字典处理成JSON格式在网络上传递
- FileTransferHandler(client).start()
-
-
-if __name__ == '__main__':
- main()
diff --git a/Day01-15/Appendix-B/guido.jpg b/Day01-15/Appendix-B/guido.jpg
deleted file mode 100644
index 78f71ae77e39edaf6acbf64e6fc0d106c4de1bb5..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/guido.jpg and /dev/null differ
diff --git a/Day01-15/Appendix-B/mmdownloader.py b/Day01-15/Appendix-B/mmdownloader.py
deleted file mode 100644
index 2cd33f79716471a24498e53adb7a927f58b06481..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/mmdownloader.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from time import time
-from threading import Thread
-
-import requests
-
-
-class DownloadHanlder(Thread):
-
- def __init__(self, url):
- super().__init__()
- self.url = url
-
- def run(self):
- filename = self.url[self.url.rfind('/') + 1:]
- resp = requests.get(self.url)
- with open('/Users/Hao/Downloads/' + filename, 'wb') as f:
- f.write(resp.content)
-
-
-def main():
- # 通过requests模块的get函数获取网络资源
- resp = requests.get(
- 'http://api.tianapi.com/meinv/?key=772a81a51ae5c780251b1f98ea431b84&num=10')
- # 将服务器返回的JSON格式的数据解析为字典
- data_model = resp.json()
- for mm_dict in data_model['newslist']:
- url = mm_dict['picUrl']
- # 通过多线程的方式实现图片下载
- DownloadHanlder(url).start()
-
-
-if __name__ == '__main__':
- main()
diff --git a/Day01-15/Appendix-B/res/TCP-IP-model.png b/Day01-15/Appendix-B/res/TCP-IP-model.png
deleted file mode 100644
index 777af47339dfcceab528fda12b076829e4b540bd..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/TCP-IP-model.png and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/after-browser.jpg b/Day01-15/Appendix-B/res/after-browser.jpg
deleted file mode 100644
index 7cc95202e7e097f5c6a5e0df6f376c8b705cbb84..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/after-browser.jpg and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/arpanet.png b/Day01-15/Appendix-B/res/arpanet.png
deleted file mode 100644
index 65d2dd37d9b033a5def338adfa23d6955a239847..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/arpanet.png and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/before-browser.jpg b/Day01-15/Appendix-B/res/before-browser.jpg
deleted file mode 100644
index f8161445ce608b4c84fe9f532c0ae5ca55e90aeb..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/before-browser.jpg and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/browers.jpg b/Day01-15/Appendix-B/res/browers.jpg
deleted file mode 100644
index 0be1d4dcf649c5c44bf60589e83c92a39aac87b3..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/browers.jpg and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/browser-market-place.jpeg b/Day01-15/Appendix-B/res/browser-market-place.jpeg
deleted file mode 100644
index 196b0f4612668e5124e76f55a192bed2a483cf24..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/browser-market-place.jpeg and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/how-data-is-processed.jpg b/Day01-15/Appendix-B/res/how-data-is-processed.jpg
deleted file mode 100644
index 4359bcd4bca2d9704e339c8fba0be31239c82834..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/how-data-is-processed.jpg and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/osi_rm.gif b/Day01-15/Appendix-B/res/osi_rm.gif
deleted file mode 100644
index 876960d9a02d59516c641911a4d0ae7e84e91daf..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/osi_rm.gif and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/osimodel.png b/Day01-15/Appendix-B/res/osimodel.png
deleted file mode 100644
index f0361c9247469a47978b005c2318c4b9eaf524a2..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/osimodel.png and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/tcpipprotocols.png b/Day01-15/Appendix-B/res/tcpipprotocols.png
deleted file mode 100644
index 4acf2169a04c9208dbb5c903b6392d759f3e32fa..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/tcpipprotocols.png and /dev/null differ
diff --git a/Day01-15/Appendix-B/res/telnet.png b/Day01-15/Appendix-B/res/telnet.png
deleted file mode 100644
index 20c86530c0c9fef0db45ede278de9ba2b90b2932..0000000000000000000000000000000000000000
Binary files a/Day01-15/Appendix-B/res/telnet.png and /dev/null differ
diff --git a/Day01-15/Appendix-B/socket1.py b/Day01-15/Appendix-B/socket1.py
deleted file mode 100644
index 82389d763caec0d68bd62b50c712a854f980b5ce..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/socket1.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""
-
-套接字 - 基于TCP协议创建时间服务器
-
-Version: 0.1
-Author: 骆昊
-Date: 2018-03-22
-
-"""
-
-from socket import *
-from time import *
-
-server = socket(AF_INET, SOCK_STREAM)
-server.bind(('localhost', 6789))
-server.listen()
-print('服务器已经启动正在监听客户端连接.')
-while True:
- client, addr = server.accept()
- print('客户端%s:%d连接成功.' % (addr[0], addr[1]))
- currtime = localtime(time())
- timestr = strftime('%Y-%m-%d %H:%M:%S', currtime)
- client.send(timestr.encode('utf-8'))
- client.close()
-server.close()
diff --git a/Day01-15/Appendix-B/socket2.py b/Day01-15/Appendix-B/socket2.py
deleted file mode 100644
index ca5ce7b16443e743d06d138d7d18d4103a43890c..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/socket2.py
+++ /dev/null
@@ -1,20 +0,0 @@
-"""
-
-套接字 - 基于TCP协议创建时间客户端
-
-Version: 0.1
-Author: 骆昊
-Date: 2018-03-22
-
-"""
-
-from socket import *
-
-client = socket(AF_INET, SOCK_STREAM)
-client.connect(('localhost', 6789))
-while True:
- data = client.recv(1024)
- if not data:
- break
- print(data.decode('utf-8'))
-client.close()
diff --git a/Day01-15/Appendix-B/socket3.py b/Day01-15/Appendix-B/socket3.py
deleted file mode 100644
index e70d154c8ca2236ed5c606669c2c7e627fe01e83..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/socket3.py
+++ /dev/null
@@ -1,19 +0,0 @@
-"""
-
-套接字 - 基于UDP协议Echo服务器
-
-Version: 0.1
-Author: 骆昊
-Date: 2018-03-22
-
-"""
-
-from socket import *
-from time import *
-
-server = socket(AF_INET, SOCK_DGRAM)
-server.bind(('localhost', 6789))
-while True:
- data, addr = server.recvfrom(1024)
- server.sendto(data, addr)
-server.close()
diff --git a/Day01-15/Appendix-B/socket4.py b/Day01-15/Appendix-B/socket4.py
deleted file mode 100644
index 4fdf9c4d49389e7330aa50a0f1fbbcfdd324ee7b..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/socket4.py
+++ /dev/null
@@ -1,22 +0,0 @@
-"""
-
-套接字 - 基于UDP协议创建Echo客户端
-
-Version: 0.1
-Author: 骆昊
-Date: 2018-03-22
-
-"""
-
-from socket import *
-
-client = socket(AF_INET, SOCK_DGRAM)
-while True:
- data_str = input('请输入: ')
- client.sendto(data_str.encode('utf-8'), ('localhost', 6789))
- data, addr = client.recvfrom(1024)
- data_str = data.decode('utf-8')
- print('服务器回应:', data_str)
- if data_str == 'bye':
- break
-client.close()
diff --git a/Day01-15/Appendix-B/socket5.py b/Day01-15/Appendix-B/socket5.py
deleted file mode 100644
index 97fe088b0713b34d4c583867f799c7e11878cf6d..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/socket5.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-
-使用socketserver模块创建时间服务器
-
-Version: 0.1
-Author: 骆昊
-Date: 2018-03-22
-
-"""
-
-from socketserver import TCPServer, StreamRequestHandler
-from time import *
-
-
-class EchoRequestHandler(StreamRequestHandler):
-
- def handle(self):
- currtime = localtime(time())
- timestr = strftime('%Y-%m-%d %H:%M:%S', currtime)
- self.wfile.write(timestr.encode('utf-8'))
-
-
-server = TCPServer(('localhost', 6789), EchoRequestHandler)
-server.serve_forever()
diff --git a/Day01-15/Appendix-B/timeclient.py b/Day01-15/Appendix-B/timeclient.py
deleted file mode 100644
index c2b711536ca551f31c93364d8ace217afb239fcf..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/timeclient.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from socket import socket
-
-
-def main():
- client = socket()
- client.connect(('10.7.152.69', 6789))
- print(client.recv(1024).decode('utf-8'))
- client.close()
-
-
-if __name__ == '__main__':
- main()
diff --git a/Day01-15/Appendix-B/timeserver.py b/Day01-15/Appendix-B/timeserver.py
deleted file mode 100644
index 048eec854a21fd1cfb59a68bd47499247f9fe453..0000000000000000000000000000000000000000
--- a/Day01-15/Appendix-B/timeserver.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from socket import socket, SOCK_STREAM, AF_INET
-from datetime import datetime
-
-
-def main():
- # 1.创建套接字对象并指定使用哪种传输服务
- # family=AF_INET - IPv4地址
- # family=AF_INET6 - IPv6地址
- # type=SOCK_STREAM - TCP套接字
- # type=SOCK_DGRAM - UDP套接字
- # type=SOCK_RAW - 原始套接字
- server = socket(family=AF_INET, type=SOCK_STREAM)
- # 2.绑定IP地址和端口(区分不同的服务)
- server.bind(('192.168.1.2', 6789))
- # 3.开启监听 - 监听客户端连接到服务器
- server.listen(512)
- print('服务器启动开始监听...')
- # 4.通过循环接收客户端的连接并作出相应的处理(提供服务)
- while True:
- # accept方法是一个阻塞方法如果没有客户端连接到服务器
- # 这个方法就会阻塞代码不会向下执行
- # accept方法返回元组其中的第一个元素是客户端对象
- # 第二个元素是客户端的地址(由IP和端口两部分构成)
- client, addr = server.accept()
- print(str(addr) + '连接到了服务器.')
- # 5.发送数据
- client.send(str(datetime.now()).encode('utf-8'))
- # 6.断开连接
- client.close()
-
-
-if __name__ == '__main__':
- main()
diff --git "a/Day01-15/Appendix-B/\347\275\221\347\273\234\347\274\226\347\250\213\345\205\245\351\227\250.md" "b/Day01-15/Appendix-B/\347\275\221\347\273\234\347\274\226\347\250\213\345\205\245\351\227\250.md"
deleted file mode 100644
index 7f33271ec283aeabc5996572f07fc873f13c662f..0000000000000000000000000000000000000000
--- "a/Day01-15/Appendix-B/\347\275\221\347\273\234\347\274\226\347\250\213\345\205\245\351\227\250.md"
+++ /dev/null
@@ -1,303 +0,0 @@
-## 网络编程入门
-
-### 计算机网络基础
-
-计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享。今天计算机网络中的设备和计算机网络的用户已经多得不可计数,而计算机网络也可以称得上是一个“复杂巨系统”,对于这样的系统,我们不可能用一两篇文章把它讲清楚,有兴趣的读者可以自行阅读Andrew S.Tanenbaum老师的经典之作《计算机网络》或Kurose和Ross老师合著的《计算机网络:自顶向下方法》来了解计算机网络的相关知识。
-
-#### 计算机网络发展史
-
-1. 1960s - 美国国防部ARPANET项目问世,奠定了分组交换网络的基础。
-
- ![](./res/arpanet.png)
-
-2. 1980s - 国际标准化组织(ISO)发布OSI/RM,奠定了网络技术标准化的基础。
-
- ![](./res/osimodel.png)
-
-3. 1990s - 英国人[蒂姆·伯纳斯-李](https://zh.wikipedia.org/wiki/%E6%8F%90%E5%A7%86%C2%B7%E6%9F%8F%E5%85%A7%E8%8C%B2-%E6%9D%8E)发明了图形化的浏览器,浏览器的简单易用性使得计算机网络迅速被普及。
-
- 在没有浏览器的年代,上网是这样的。
-
- ![](./res/before-browser.jpg)
-
- 有了浏览器以后,上网是这样的。
-
- ![](./res/after-browser.jpg)
-
-#### TCP/IP模型
-
-实现网络通信的基础是网络通信协议,这些协议通常是由[互联网工程任务组](https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E5%B7%A5%E7%A8%8B%E4%BB%BB%E5%8A%A1%E7%BB%84) (IETF)制定的。所谓“协议”就是通信计算机双方必须共同遵从的一组约定,例如怎样建立连接、怎样互相识别等,网络协议的三要素是:语法、语义和时序。构成我们今天使用的Internet的基础的是TCP/IP协议族,所谓协议族就是一系列的协议及其构成的通信模型,我们通常也把这套东西称为TCP/IP模型。与国际标准化组织发布的OSI/RM这个七层模型不同,TCP/IP是一个四层模型,也就是说,该模型将我们使用的网络从逻辑上分解为四个层次,自底向上依次是:网络接口层、网络层、传输层和应用层,如下图所示。
-
-![](./res/TCP-IP-model.png)
-
-IP通常被翻译为网际协议,它服务于网络层,主要实现了寻址和路由的功能。接入网络的每一台主机都需要有自己的IP地址,IP地址就是主机在计算机网络上的身份标识。当然由于IPv4地址的匮乏,我们平常在家里、办公室以及其他可以接入网络的公共区域上网时获得的IP地址并不是全球唯一的IP地址,而是一个[局域网(LAN)](https://zh.wikipedia.org/zh-hans/%E5%B1%80%E5%9F%9F%E7%BD%91)中的内部IP地址,通过[网络地址转换(NAT)服务](https://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2)我们也可以实现对网络的访问。计算机网络上有大量的被我们称为“[路由器](https://zh.wikipedia.org/wiki/%E8%B7%AF%E7%94%B1%E5%99%A8)”的网络中继设备,它们会存储转发我们发送到网络上的数据分组,让从源头发出的数据最终能够找到传送到目的地通路,这项功能就是所谓的路由。
-
-TCP全称传输控制协议,它是基于IP提供的寻址和路由服务而建立起来的负责实现端到端可靠传输的协议,之所以将TCP称为可靠的传输协议是因为TCP向调用者承诺了三件事情:
-
-1. 数据不传丢不传错(利用握手、校验和重传机制可以实现)。
-2. 流量控制(通过滑动窗口匹配数据发送者和接收者之间的传输速度)。
-3. 拥塞控制(通过RTT时间以及对滑动窗口的控制缓解网络拥堵)。
-
-
-
-#### 网络应用模式
-
-1. C/S模式和B/S模式。这里的C指的是Client(客户端),通常是一个需要安装到某个宿主操作系统上的应用程序;而B指的是Browser(浏览器),它几乎是所有图形化操作系统都默认安装了的一个应用软件;通过C或B都可以实现对S(服务器)的访问。关于二者的比较和讨论在网络上有一大堆的文章,在此我们就不再浪费笔墨了。
-2. 去中心化的网络应用模式。不管是B/S还是C/S都需要服务器的存在,服务器就是整个应用模式的中心,而去中心化的网络应用通常没有固定的服务器或者固定的客户端,所有应用的使用者既可以作为资源的提供者也可以作为资源的访问者。
-
-### 基于HTTP协议的网络资源访问
-
-#### HTTP(超文本传输协议)
-
-HTTP是超文本传输协议(Hyper-Text Transfer Proctol)的简称,维基百科上对HTTP的解释是:超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,它是[万维网](https://zh.wikipedia.org/wiki/%E5%85%A8%E7%90%83%E8%B3%87%E8%A8%8A%E7%B6%B2)数据通信的基础,设计HTTP最初的目的是为了提供一种发布和接收[HTML](https://zh.wikipedia.org/wiki/HTML)页面的方法,通过HTTP或者[HTTPS](https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%AE%89%E5%85%A8%E5%8D%8F%E8%AE%AE)(超文本传输安全协议)请求的资源由URI([统一资源标识符](https://zh.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E8%B3%87%E6%BA%90%E6%A8%99%E8%AD%98%E7%AC%A6))来标识。关于HTTP的更多内容,我们推荐阅读阮一峰老师的[《HTTP 协议入门》](http://www.ruanyifeng.com/blog/2016/08/http.html),简单的说,通过HTTP我们可以获取网络上的(基于字符的)资源,开发中经常会用到的网络API(有的地方也称之为网络数据接口)就是基于HTTP来实现数据传输的。
-
-#### JSON格式
-
-**JSON**(**J**ava**S**cript **O**bject **N**otation)是一种轻量级的数据交换语言,该语言以易于让人阅读的文字(纯文本)为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是最初只是Javascript中一种创建对象的字面量语法,但它在当下更是一种独立于语言的数据格式,很多编程语言都支持JSON格式数据的生成和解析,Python内置的json模块也提供了这方面的功能。由于JSON是纯文本,它和[XML](https://zh.wikipedia.org/wiki/XML)一样都适用于异构系统之间的数据交换,而相较于XML,JSON显得更加的轻便和优雅。下面是表达同样信息的XML和JSON,而JSON的优势是相当直观的。
-
-XML的例子:
-
-```XML
-
-