V1.0功能:AQI计算
案例描述:
案例分析:
- 实现步骤:
- 实现每种污染物对应的AQI函数,一个输入参数,即Cp
- 实现线性缩放函数,5个输入参数
上机实验:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # author: Kevin.Wang 4 # time : 2018/10/16 5 6 7 """ 8 作者:王鑫正 9 版本:1.0 10 日期:2018/10/16 11 功能:AQI计算 12 """ 13 14 15 def cal_linear(iaqi_lo, iaqi_hi, bp_lo, bp_hi, cp): 16 """ 17 范围缩放 18 """ 19 iaqi = (iaqi_hi - iaqi_lo) * (cp - bp_lo) / (bp_hi - bp_lo) + iaqi_lo 20 return iaqi 21 22 23 def cal_pm_iaqi(pm_val): 24 """ 25 计算PM2.5的IAQI 26 """ 27 if 0 <= pm_val < 35: 28 iaqi = cal_linear(0, 50, 0, 35, pm_val) 29 elif 35 <= pm_val < 75: 30 iaqi = cal_linear(50, 100, 35, 75, pm_val) 31 elif 75 <= pm_val < 115: 32 iaqi = cal_linear(100, 150, 75, 115, pm_val) 33 else: 34 pass 35 36 return iaqi 37 38 39 def cal_co_iaqi(co_val): 40 """ 41 计算CO的IAQI 42 """ 43 if 0 <= co_val < 3: 44 iaqi = cal_linear(0, 50, 0, 3, co_val) 45 elif 3 <= co_val < 5: 46 iaqi = cal_linear(50, 100, 2, 4, co_val) 47 48 else: 49 pass 50 51 return iaqi 52 53 54 def cal_aqi(para_list): 55 """ 56 AQI计算 57 """ 58 pm_val = para_list[0] 59 co_val = para_list[1] 60 61 pm_iaqi = cal_pm_iaqi(pm_val) 62 co_iaqi = cal_co_iaqi(co_val) 63 64 iaqi_list = [] 65 iaqi_list.append(pm_iaqi) 66 iaqi_list.append(co_iaqi) 67 68 aqi = max(iaqi_list) 69 return aqi 70 71 72 def main(): 73 """ 74 主函数 75 """ 76 print('请输入以下信息,用空格分隔') 77 input_str = input('(1)PM2.5 (2)CO:') 78 str_list = input_str.split(' ') 79 pm_val = float(str_list[0]) 80 co_val = float(str_list[1]) 81 82 para_list = [] 83 para_list.append(pm_val) 84 para_list.append(co_val) 85 86 # 调用AQI计算函数 87 aqi_val = cal_aqi(para_list) 88 89 print('空气质量指数为:{}'.format(aqi_val)) 90 91 92 if __name__ == '__main__': 93 main()
V2.0功能:json文件读取
案例描述:
- 读取已经获取的JSON数据文件
- 并将AQI前5的数据输出到文件
上机实验:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # author: Kevin.Wang 4 # time : 2018/10/16 5 6 7 """ 8 作者:王鑫正 9 版本:1.0 10 日期:2018/10/16 11 功能:2.0 JSON文件读取 12 """ 13 import json 14 15 16 def process_json_file(filepath): 17 """ 18 解码json文件 19 """ 20 f = open(filepath,mode='r',encoding='utf-8') 21 city_list = json.load(f) 22 return city_list 23 24 25 def main(): 26 """ 27 主函数 28 """ 29 filepath = input('请输出json文件名称:') 30 city_list = process_json_file(filepath) 31 city_list.sort(key=lambda city:city['aqi']) 32 top5_list = city_list[:5] 33 34 f = open('top5_aqi.json',mode='w',encoding='utf-8') 35 json.dump(top5_list,f,ensure_ascii=False) 36 f.close() 37 38 39 if __name__ == '__main__': 40 main()
补充说明:
1. JSON格式
- JSON(JavaScript Object Notation)是一种轻量级数据交换格式
- 可以对复杂数据进行表达和存储,易于阅读和理解
- 规则
- 数据保存在键值对中
- 键值对之间由逗号分隔
- 花括号用于保存键值对数据组成的对象
- 方括号用于保存键值对数据组成的数组
- 采用对象、数组方式组织起来的键值对可以表示任何结构的数据
- JSON格式是互联网上主要使用的复杂数据格式之一
1 [ 2 { 3 "aqi":47, 4 "area":"北京", 5 "position_name":"万寿西宫", 6 "time_point":"2017-07-29" 7 }, 8 { 9 "aqi": 63, 10 "area": "北京", 11 "position_name": "叮铃", 12 "time_point": "2017-07-29" 13 } 14 ]
2. JSON库
- JSON库是处理JSON格式的Python标准库
- 两个过程:
- 编码(encoding),将Python数据类型转换成JSON格式的过程
- 解码(decoding),从JSON格式中解析数据对用到Python数据类型的过程
- 函数:
- dumps(),将Python数据类型转换为JSON格式
- loads(),将JSON格式字符串转换为Python数据类型
- dump(),与dumps()功能一致,输出到文件
- load(),与loads()功能一致,从文件读入
3. 列表排序
- list.sort(func)
- func指定了排序的方法
- func可以通过lambda函数实现
4. JSON格式转换
- 百度搜索“json format”,可以转换
V3.0功能:读取JSON数据文件并将其转换为CSV文件
案例描述:
- 读取已经获取的JSON数据文件
- 并将其转换为CSV文件
上机实验:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # author: Kevin.Wang 4 # time : 2018/10/16 5 6 7 """ 8 作者:王鑫正 9 版本:1.0 10 日期:2018/10/16 11 功能:3.0 JSON文件读取,转换为CSV文件 12 """ 13 import json 14 import csv 15 16 17 def process_json_file(filepath): 18 """ 19 解码json文件 20 """ 21 f = open(filepath,mode='r',encoding='utf-8') 22 city_list = json.load(f) 23 return city_list 24 25 26 def main(): 27 """ 28 主函数 29 """ 30 filepath = input('请输出json文件名称:') 31 city_list = process_json_file(filepath) 32 city_list.sort(key=lambda city:city['aqi']) 33 34 lines = [] 35 # 列名 36 lines.append(list(city_list[0].keys())) 37 for city in city_list: 38 lines.append(list(city.values())) 39 40 f = open('aqi.csv','w',encoding='utf-8',newline='') 41 writer = csv.writer(f) 42 for line in lines: 43 writer.writerow(line) 44 45 46 if __name__ == '__main__': 47 main()
补充说明:
1. CSV格式
- CSV(Comma-Separated Values)是一种通用的、相对简单的文件格式
- 在商业和科学领域上广泛使用
- 规则
- 以行为单位
- 每行表示一条记录
- 以英文逗号分割每列数据(如果数据为空,逗号也要保留)
- 列名通常放置在文件第一行
- import csv
- csv.writerow(list)将列表中的元素写入文件的一行中
V4.0增加功能:判断输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
案例描述:
- 根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作
上机实验:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # author: Kevin.Wang 4 # time : 2018/10/16 5 6 7 """ 8 作者:王鑫正 9 版本:1.0 10 日期:2018/10/16 11 功能:4.0 JSON文件读取,转换为CSV文件 12 """ 13 import json 14 import csv 15 import os 16 17 18 def process_json_file(filepath): 19 """ 20 解码json文件 21 """ 22 # f = open(filepath,mode='r',encoding='utf-8') 23 # city_list = json.load(f) 24 # return city_list 25 26 with open(filepath,mode='r',encoding='utf-8') as f: 27 city_list = json.load(f) 28 print(city_list) 29 30 31 def process_csv_file(filepath): 32 """ 33 处理csv文件 34 """ 35 with open(filepath, mode='r', encoding='utf-8', newline='') as f: 36 reader = csv.reader(f) 37 for row in reader: 38 print(', '.join(row)) # 将列表里每一行的函数用‘, ’连接起来 39 40 41 def main(): 42 """ 43 主函数 44 """ 45 filepath = input('请输入文件名称:') 46 filename, file_ext = os.path.splitext(filepath) 47 48 if file_ext == '.json': 49 # json文件 50 process_json_file(filepath) 51 elif file_ext == '.csv': 52 # csv文件 53 process_csv_file(filepath) 54 else: 55 print('不支持的文件格式!') 56 57 58 if __name__ == '__main__': 59 main()
补充说明:
1. CSV补充
- CSV文件读取
1 import csv 2 csv.reader() 将没行记录作为列表返回
- 使用with语句操作文件对象
1 with open('file name') as somefile: 2 for line in somefile: 3 print(line)
- 使用with语句,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭文件,不需要close()语句。
2. os模块
- os模块提供了与系统、目录操作相关的功能,不受平台的限制
函数 | 含义 |
os.remove() | 删除文件 |
os.makedirs() | 创建多层目录 |
os.rmdir() | 删除单级目录 |
os.rename() | 重命名文件 |
os.path.isfile() | 判断是否为文件 |
os.path.isdir() | 判断是否为目录 |
os.path.join() | 连接目录,如path1连接path2为path1/path2 |
os.path.splitext() | 将文件分割成文件名与扩展名,如分割tmp.txt为tmp和.txt |
V5.0增加功能:网络爬虫
案例描述:
- 为了能有效地提取并利用网络信息并提供工作效率,出现了网络爬虫
- 利用网络爬虫实时获取城市的空气质量
上机实验:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # author: Kevin.Wang 4 # time : 2018/10/16 5 6 7 """ 8 作者:王鑫正 9 版本:1.0 10 日期:2018/10/16 11 功能:4.0 JSON文件读取,转换为CSV文件 12 """ 13 14 import requests 15 16 17 def get_html_text(url): 18 """ 19 20 """ 21 r = requests.get(url, timeout=30) 22 # print(r.status_code) 23 return r.text 24 25 26 def main(): 27 """ 28 主函数 29 """ 30 city_pinyin = input('请输入城市拼音:',) 31 url = 'http://pm25.in/' + city_pinyin 32 url_text = get_html_text(url) 33 # print(url_text) 34 aqi_div = '''<div class="span12 data"> 35 <div class="span1"> 36 <div class="value"> 37 ''' 38 index = url_text.find(aqi_div) 39 begin_index = index + len(aqi_div) 40 end_index = begin_index + 2 41 aqi_val = url_text[begin_index:end_index] 42 print('空气质量为:{}'.format(aqi_val)) 43 44 45 if __name__ == '__main__': 46 main()
补充说明:
1. 网络爬虫
- 自动抓取互联网信息的程序;利用互联网数据进行分析、开发产品
- 步骤:
- 通过网络链接获取网页内容
- 对获得的网页内容进行处理
2. requests模块
- requests模块是一个简洁且简单的处理HTTP请求的工具
- 支持非常丰富的链接访问功能,包括URL获取,HTTP会话,Cookie记录等
- requests网页请求
函数 | 含义 |
get() | 对应HTTP的GET方式 |
post() | 对应HTTP的POST方式,用于传递用户数据 |
- requests对象属性
函数 | 含义 |
status_code | HTTP请求的返回状态,200表示连接成功,400表示失败 |
text | HTTP相应内容的字符串形式,即url对应的页面内容 |
3. 网页常用操作
- 查看对应代码,右键选择“审查元素”
- 打开网页源码,Ctrl+U