Python程序设计#2作业
作业题目
数据文件(test.txt)是一个全球温度年度异常历史数据。基于Sanic实现一个查询服务,服务包括:
- 按起始和结束年份查询历史数据,查询结果支持多种格式:JSON、XML、CSV(用逗号作为间隔符)。
- 按温度高低进行排序,支持升序和降序两种排序方式。
作业内容
程序源代码嵌入下方的code block中。
```python from sanic import Sanic from sanic import response from sanic.response import json import copy from xml.dom.minidom import Document
app = Sanic(" name ")
temper=[] tempi=[] tempd=[] name=["year","Land-Ocean Temperature Index","Year No_Smoothing Lowess"] def read_files(): fo=open("F:/zzz/AllCode/python/prj/test.txt","r") #以列表方式存储 for line in fo: a, b, c = [float(i) for i in line.split()] #print(a,b,c) temper.append([int(a),b,c]) fo.close()
def takeSecond(elem): return elem[1]
@app.route("/json/increase") async def post_json(request): tempi=copy.deepcopy(temper) tempi.sort(key=takeSecond) tempans=list() for words in tempi: tempans.append({'year':words[0],'temperature':words[1],'lowess':words[2]}) return json(tempans)
@app.route("/xml/increase")
async def post_json(request):
tempi=copy.deepcopy(temper)
tempi.sort(key=takeSecond)
# 创建doc
doc = Document()
# 创建根节点
root_node = doc.createElement("all_data")
doc.appendChild(root_node)
for list in tempi:
data_node = doc.createElement("data")
year_node = doc.createElement("year")
year_value = doc.createTextNode(str(list[0]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
year_node = doc.createElement("Temperature")
year_value = doc.createTextNode(str(list[1]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
year_node = doc.createElement("Lowess")
year_value = doc.createTextNode(str(list[2]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
root_node.appendChild(data_node)
with open('F:/zzz/AllCode/python/prj/note.xml', 'w') as f:
f.write(doc.toprettyxml(indent='\t'))
return await response.file('F:/zzz/AllCode/python/prj/note.xml')
@app.route("/csv/increase") async def post_json(request): tempi=copy.deepcopy(temper) tempi.sort(key=takeSecond) with open("F:/zzz/AllCode/python/prj/test2.txt","w") as f: for list in tempi: s=str(list[0])+","+str(list[1])+","+str(list[2])+"\n" f.write(s) return await response.file('F:/zzz/AllCode/python/prj/test2.txt')
@app.route("/json/decrease") async def post_json(request): tempd=copy.deepcopy(temper) tempd.sort(key=takeSecond,reverse=True) tempans=list() for words in tempd: tempans.append({'year':words[0],'temperature':words[1],'lowess':words[2]}) return json(tempans)
@app.route("/xml/decrease")
async def post_json(request):
tempd=copy.deepcopy(temper)
tempd.sort(key=takeSecond,reverse=True)
# 创建doc
doc = Document()
# 创建根节点
root_node = doc.createElement("all_data")
doc.appendChild(root_node)
for list in tempd:
data_node = doc.createElement("data")
year_node = doc.createElement("year")
year_value = doc.createTextNode(str(list[0]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
year_node = doc.createElement("Temperature")
year_value = doc.createTextNode(str(list[1]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
year_node = doc.createElement("Lowess")
year_value = doc.createTextNode(str(list[2]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
root_node.appendChild(data_node)
with open('F:/zzz/AllCode/python/prj/note.xml', 'w') as f:
f.write(doc.toprettyxml(indent='\t'))
return await response.file('F:/zzz/AllCode/python/prj/note.xml')
@app.route("/csv/decrease") async def post_json(request): tempd=copy.deepcopy(temper) tempd.sort(key=takeSecond,reverse=True) with open("F:/zzz/AllCode/python/prj/test2.txt","w") as f: for list in tempd: s=str(list[0])+","+str(list[1])+","+str(list[2])+"\n" f.write(s) return await response.file('F:/zzz/AllCode/python/prj/test2.txt')
@app.route('/json/start/
@app.route('/xml/start/
doc.appendChild(root_node)
for list in temper[start-1880:end-1880+1]:
data_node = doc.createElement("data")
year_node = doc.createElement("year")
year_value = doc.createTextNode(str(list[0]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
year_node = doc.createElement("Temperature")
year_value = doc.createTextNode(str(list[1]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
year_node = doc.createElement("Lowess")
year_value = doc.createTextNode(str(list[2]))
year_node.appendChild(year_value)
data_node.appendChild(year_node)
root_node.appendChild(data_node)
with open('F:/zzz/AllCode/python/prj/note.xml', 'w') as f:
f.write(doc.toprettyxml(indent='\t'))
return await response.file('F:/zzz/AllCode/python/prj/note.xml')
@app.route('/csv/start/
if name ==" main ": read_files() app.run(host="0.0.0.0",port=8000)
```
代码说明
访问http://0.0.0.0/8000端口进行访问,访问结果与网址匹配关系对应如下
网址 | 功能 |
---|---|
http://0.0.0.0/8000/json/increase | 以json格式返回递增数据 |
http://0.0.0.0/8000/xml/increase | 以xml格式返回递增数据 |
http://0.0.0.0/8000/csv/increase | 以csv格式返回递增数据 |
http://0.0.0.0/8000/json/decrease | 以json格式返回递减数据 |
http://0.0.0.0/8000/xml/decrease | 以xml格式返回递减数据 |
http://0.0.0.0/8000/csv/decrease | 以csv格式返回递减数据 |
http://0.0.0.0/8000/json/start/
|
以json格式返回从start_year到end_year的数据 |
http://0.0.0.0/8000/xml/start/
|
以xml格式返回从start_year到end_year的数据 |
http://0.0.0.0/8000/csv/start/
|
以csv格式返回从start_year到end_year的数据 |
在刚开始时先通过读文件,将数据以列表的方式进行存储。json返回格式直接以sanic自带json格式返回,xml格式与csv格式通过存到文件之中,再通过文件来返回。xml的格式用了Document库函数,通过此来创建结点。
参考文献
- “分布/并行式计算”教学资源网站设计与实现(燕山大学·赵赓)
- 基于J2EE物流控制管理系统设计与实现(电子科技大学·徐悦晋)
- DB2 tools自动化测试系统的设计与实现(北京邮电大学·石存玉)
- 基于J2EE平台的物业管理系统的设计(贵州大学·刘怡伶)
- 基于J2EE平台的物业管理系统的设计(贵州大学·刘怡伶)
- 基于信息化服务的湖南电大课程教学系统的设计与实现(电子科技大学·龙昱)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于信息化服务的湖南电大课程教学系统的设计与实现(电子科技大学·龙昱)
- 丰昌公司电子商务系统的设计与实现(大连理工大学·陈贺)
- 基于J2EE的手机综合网站的设计与实现(吉林大学·宋微)
- 基于J2EE的远程教育平台设计与实现(西北大学·陈怡)
- 基于J2EE的高校课堂教学管理系统设计与分析(电子科技大学·张霖婧)
- 基于J2EE的物流信息管理系统的设计与实现(北京邮电大学·杨帆)
- DB2 tools自动化测试系统的设计与实现(北京邮电大学·石存玉)
- 基于J2EE的手机综合网站的设计与实现(吉林大学·宋微)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码工坊 ,原文地址:https://m.bishedaima.com/yuanma/36023.html