用python根据需要开共享基站小区的列表输出操作脚本并打包成可执行exe文件

用python根据需要开共享基站小区的列表输出操作脚本并打包成可执行exe文件

1、需求:近期工作需要根据给出的基站小区列表数据来编写开共享的操作脚本。具体需求如下:

原始数据:

在这里插入图片描述
最后得到的脚本:
在这里插入图片描述
在这里插入图片描述

2、解决思路:

1)观察原始脚本数据,可以发现脚本数据其实就是将同个基站下的小区的在Unlock_Cell ^EUtranCell.DD中用“|””拼接起来,然后下方就编写每个小区共享开关的脚本,
在这里插入图片描述
因此,可以用$cellid来代替不同的小区名称,并将原始脚本用分隔符“spilt”分割成五段,其中第2段和第4段是需要动态生成的,其他片段保持不变,最后再将所有片段按顺序拼接起来就完成操作脚本。
在这里插入图片描述
具体代码如下:

import os
import pandas as pd
# import glob
import PySimpleGUI as sg
import datetime

txt = sg.popup_get_file('请选择txt脚本所在的位置')
xlsx = sg.popup_get_file('请选择xlsx脚本所在的位置')
filedir =  os.path.dirname(xlsx)  #获取xlsx的文件夹位置
print(filedir)

print("开始读取数据,请稍等")
df =  pd.read_excel(xlsx)  #读取基站小区列表数据 

# 打开txt文件并读取内容
with open(txt, 'r') as file:
    content = file.read()

print("正在处理数据,请稍等")
result = content.split('split')  # 使用 'split' 作为分隔符,将原始脚本文件切分成5个部分

strings = []  #最终脚本文件字符串列表
file_names = []  #最终文件路径列表

ip = df.iloc[:, 2].drop_duplicates()   #将物理ip去重,方便后续将其单独写入到txt文件中

now = datetime.datetime.now().strftime('%Y%m%d')  #获取当前的年月日,用于后面生成文件夹时把日期加上,便于后续可以回溯脚本,若需要更高的时间精度要求可自行修改日期格式

groups = df.groupby(df.columns.tolist()[1])  #根据基站id将数据集分组

for name,group in groups:
    # name 是分组集合,group是组名
    # 将cellid转换成list
    list_cellid = group.iloc[:, 0].tolist()

    result1_new = ''  #脚本第2部分需要将cellid拼接到一起之后替换掉原有的$cellid
    result3_new = ''  #脚本第4部分需要重复循环生成若干个与cellid相关的代码段
    for i in range(0,len(list_cellid)):
        if( i == 0) :
            result1_new = list_cellid[i]  #如果只有一个小区则不需要进行小区列表拼接
        else:
            result1_new = result1_new +  '|' + list_cellid[i]  #将多个小区用“|”拼接到一起

        result3_new = result3_new + result[3].replace('$cellid', list_cellid[i])

    result1_new = result[1].replace('$cellid', result1_new)  #把拼接完成的字符串替换掉脚本中的占位符“$cellid”
    result_new = result[ 0] +  result1_new + result[2] + result3_new + result[4]  #将处理后的字符串拼接到一起

    strings.append(result_new)

    if not os.path.exists( 'output' + now ):
        os.makedirs( 'output'+ now  )   #判定是否已存在这个文件,若不存在则新建文件
    file_names.append(filedir +'/output' + now +'/'+ str(name)+'.mos')


# 将文本写入mos文件中
def write_to_multiple_txt(strings, file_names):
    for i, string in enumerate(strings):
        file_name = file_names[i]
        with open(file_name, 'w') as file:
            file.write(string)
#

print("正在输出文件,请稍等")
for i in range(0,len(strings))  :
    write_to_multiple_txt(strings, file_names)
#     将ip输出到SiteList文件中,并放在和脚本同一文件夹下
ip.to_csv(filedir+'/output' + now +'/'+'SiteList.txt',sep=',',index=False,header=False)

print("输出文件成功,可到xlsx文件的同级目录output文件夹查看")
os.system('pause')

实际上支撑厂家那边有现成的脚本可以实现,由于版权问题未能分享使用,所以就自己动手写,笔者水平有限,目前只根据实际需求写个简单程序实现脚本中字符串的循环拼接等操作。实际工作中需要将程序分享给其他同事使用,因此需要将程序打包成可执行程序exe程序,这里利用pyinstaller来进行打包,步骤如下:(这里参考其他小伙伴的操作:https://www.jb51.net/article/227355.htm)

#1、在cmd命令行中安装pyinstaller
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
#2、cmd 切换到 python 文件的目录。
D:  #切换盘符
cd python程序所在的位置  #如 cd D:\pythonWorkSpace
pyinstaller -F   生成开共享脚本1.0.py

在这里插入图片描述

执行完毕会发现生成了 3 个文件夹,其中 dist 文件夹就有我们已经打包完成的 exe 文件。

详细参数
pyinstaller参数的含义如下面的表格:
参数 用法
-F 生成结果是一个 exe 文件,所有的第三方依赖、资源和代码均被打包进该 exe 内
-D 生成结果是一个目录,各种第三方依赖、资源和 exe 同时存储在该目录(默认)
-a 不包含unicode支持
-d 执行生成的 exe 时,会输出一些log,有助于查错
-w 不显示命令行窗口
-c 显示命令行窗口(默认)
-p 指定额外的 import 路径,类似于使用 python path
-i 指定图标
-v 显示版本号
-n 生成的 .exe 的文件名

也可以窗口化的形式来打包exe,如auto-py-to-exe 一个将 pyinstaller 封装成为 GUI 窗口的模块。

#安装模块
pip install auto-py-to-exe -i https://pypi.tuna.tsinghua.edu.cn/simple/

在这里插入图片描述

安装完成之后,在命令行输入 auto-py-to-exe 打开打包窗口。
在窗口中主要有几个参数:

Script Location:就是 python 脚本的路径
Onefile (–onedir / --onefile):就是上面的 -D 和 -F 参数,生成单个 exe 文件或者生成一个文件夹
Console Window (–console / --windowed):就是上面的 -w 和 -c 参数,表示在运行的时候是否出现命令行窗口
ICON:就是 ico 图标的地址
设置完这几个参数之后,在下面的 Current Command 框就会显示 pyinstaller 命令。点击最后的按钮,生成 exe 文件。
在这里插入图片描述

  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值