49 lines
3.1 KiB
Markdown
49 lines
3.1 KiB
Markdown
### 读写文本文件
|
||
|
||
在使用`open`函数时指定好文件名并将文件模式设置为`'w'`即可。注意如果需要对文件内容进行追加式写入,应该将模式设置为`'a'`
|
||
|
||
|
||
| JSON | Python |
|
||
| ------------------- | ------------ |
|
||
| object | dict |
|
||
| array | list |
|
||
| string | str |
|
||
| number (int / real) | int / float |
|
||
| true / false | True / False |
|
||
| null | None |
|
||
|
||
| Python | JSON |
|
||
| -------------------------------------- | ------------ |
|
||
| dict | object |
|
||
| list, tuple | array |
|
||
| str | string |
|
||
| int, float, int- & float-derived Enums | number |
|
||
| True / False | true / false |
|
||
| None | null |
|
||
|
||
json模块主要有四个比较重要的函数,分别是:
|
||
|
||
- `dump` - 将Python对象按照JSON格式序列化到文件中
|
||
- `dumps` - 将Python对象处理成JSON格式的字符串
|
||
- `load` - 将文件中的JSON数据反序列化成对象
|
||
- `loads` - 将字符串的内容反序列化成Python对象
|
||
|
||
这里出现了两个概念,一个叫序列化,一个叫反序列化。自由的百科全书[维基百科](https://zh.wikipedia.org/)上对这两个概念是这样解释的:“序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换为可以存储或传输的形式,这样在需要的时候能够恢复到原先的状态,而且通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本(拷贝)。与这个过程相反的动作,即从一系列字节中提取数据结构的操作,就是反序列化(deserialization)”。
|
||
|
||
目前绝大多数网络数据服务(或称之为网络API)都是基于[HTTP协议](https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE)提供JSON格式的数据,关于HTTP协议的相关知识,可以看看阮一峰老师的[《HTTP协议入门》](http://www.ruanyifeng.com/blog/2016/08/http.html),如果想了解国内的网络数据服务,可以看看[聚合数据](https://www.juhe.cn/)和[阿凡达数据](http://www.avatardata.cn/)等网站,国外的可以看看[{API}Search](http://apis.io/)网站。下面的例子演示了如何使用[requests](http://docs.python-requests.org/zh_CN/latest/)模块(封装得足够好的第三方网络访问模块)访问网络API获取国内新闻,如何通过json模块解析JSON数据并显示新闻标题,这个例子使用了[天行数据](https://www.tianapi.com/)提供的国内新闻数据接口,其中的APIKey需要自己到该网站申请。
|
||
|
||
```Python
|
||
import requests
|
||
import json
|
||
|
||
|
||
def main():
|
||
resp = requests.get('http://api.tianapi.com/guonei/?key=APIKey&num=10')
|
||
data_model = json.loads(resp.text)
|
||
for news in data_model['newslist']:
|
||
print(news['title'])
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|
||
``` |