Flask后端开发(二) - 功能实现和项目总结

前情回顾
Flask后端开发(一)-基础知识和前期准备

1. 功能1:修改文件参数值

针对文件参数值的修改,具体流程如下:

  • 前端接收用户修改的数据,传递给后端;
  • 后端接口接收数据之后,读取对应文件;
  • 定位修改位置,替换数据;
  • 返回修改结果给前端。

1.1. 获取网页端传参

前端传递参数的方式有两种,一种是GET,一种是POST,具体可参考Flask后端开发(一)-基础知识和前期准备

后端接收数据主要使用flask中的request模块,具体代码如下:

#包导入
from flask import request

#前后端协商好传递数据的名称之后,后端根据参数名进行接收
if request.method == "POST":
    userID= str(request.form.get("userID"))
elif request.method == "GET":
    userID= str(request.args.get("userID"))

#如果需要额外处理,例如字符串"a,b,c"需要转换为列表["a","b","c"],可以使用split函数
BSD= (request.form.get("BSD")).split(",")

#注:上述是代码片段,而非完整代码,一般后端接收数据写在接口函数中

1.2. 读取文件

1.2.1. 一般文件读取方式

一般文件包括.txt.c.log等文件,其内容读取主要使用python中file模块的open函数,具体代码如下:


path= "文件路径"
with open(path, "r",encoding='utf8') as file:
    file_content = file.read()
#整个文件内容存储在file_content中

关于file模块的具体使用,可参考我的这篇博客:【python技巧】文本文件的读写操作

1.2.2. 特殊文件 —— mlx文件

本项目的一个特殊之处就是需要处理.mlx文件(实时脚本文件),这是matlab中的一种文件格式,其内容是二进制的,无法直接读取。因此,在本文当中,解决方案是将.mlx文件手动转换为.m文件,然后再读取.m文件的内容(真的很笨蛋,但是有效)。
对于.m文件,则可以按照一般文件的读取方式进行读取。

1.2.3. 特殊文件 —— .xlx文件

本项目中还会涉及到表格文件的数据读写,这里使用的是xlrd模块,具体代码如下:

#包导入
import xlrd


#查找对应文件内容
file_path="文件路径"
#打开表格
wb = xlrd.open_workbook(file_path)
ws = wb.sheet_by_name('Sheet1')
#按行读取,返回给前端一个行列表:
n_rows = ws.nrows#获取行数
for i in range(2,n_rows):#按行读取,进行筛选,第一行是表头,第二行开始是数据
    get_value=ws.cell(i,3).value#获取第i行第3列的数据

1.3. 查找数据修改位置,替换数据

本项目的需求是修改文件中的对应参数,涉及很多代码行的参数修改,因此,需要根据变量名查找相关位置。

  1. 定位
    根据pytho字符串中的find函数查找变量名所在的位置,参考博客如下Python find()方法,具体代码如下:
# 其中file_content是文件内容,变量名是需要查找的变量名
## 1. 调度类型
 start_index_1 = file_content.find(
     "simParameters.SchedulingType ="
 )
 end_index_1 = file_content.find(
     "simParameters.NumUEs =",
     start_index_1,
 )  # 这之间修改schedulingtype的取值
 ## 2. UESpeed
 start_index_2 = file_content.find(
     "simParameters.UESpeed =", end_index_1
 )
 end_index_2 = file_content.find(
     "% Validate the UE positions",
     start_index_2,
 )
 ## 3. max_RB
 start_index_3 = file_content.find(
     "simParameters.NumRBs =", end_index_2
 )
 end_index_3 = file_content.find(
     "simParameters.SCS =",
     start_index_3,
 ) 
 ## 4. SCS
 start_index_4 = file_content.find(
     "simParameters.SCS =", end_index_3
 )
 end_index_4 = file_content.find(
     "simParameters.DLCarrierFreq =",
     start_index_4,
 )

这部分的下标定位情况,可参考我的此篇博客:【python技巧】替换文件中的某几行

  1. 替换
    在本项目中使用的全文替换,具体代码结构如下:
# 1. 读取文件
path = "文件路径"
with open(path, "r",encoding='utf-8') as file:
file_content = file.read()

# 2. 定位
start_index_1 = file_content.find("simParameters.UEPosition =")
end_index_1 = file_content.find("simParameters.UESpeed =",start_index_1)  # 这之间修改ue_position的取值
start_index_2 = file_content.find("simParameters.Position = ", end_index_1)
end_index_2 = file_content.find("csirsConfig = nrCSIRSConfig", start_index_2)

if (start_index_1 == -1 or end_index_1 == -1 or start_index_2 == -1 or end_index_1 == -1):
  return jsonify({
   "Error": "找不到对应的参数位置"})

# 3.更新参数值
updated_content = (
  file_content[:start_index_1]
  + "simParameters.UEPosition = "
  + str(UE_position)
  + ";\n"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值