Python程序设计#2作业

Python程序设计#2作业 作业题目 数据文件(test,txt)是一个全球温度年度异常历史数据,基于Sanic实现一个查询服务,服务包括: 按起始和结束年份查询历史数据

本文包含相关资料包-----> 点击直达获取<-------

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/ /end/ ') async def query_year(request,start,end): tempans=list() for words in temper[start-1880:end-1880+1]: tempans.append({'year':words[0],'temperature':words[1],'lowess':words[2]}) return json(tempans)

@app.route('/xml/start/ /end/ ') async def query_year(request,start,end): # 创建doc doc = Document() # 创建根节点 root_node = doc.createElement("all_data")
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/ /end/ ') async def query_year(request,start,end): with open("F:/zzz/AllCode/python/prj/test2.txt","w") as f: for list in temper[start-1880:end-1880+1]: 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')

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/ /end/ 以json格式返回从start_year到end_year的数据
http://0.0.0.0/8000/xml/start/ /end/ 以xml格式返回从start_year到end_year的数据
http://0.0.0.0/8000/csv/start/ /end/ 以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

相关推荐

发表回复

登录后才能评论