1.脚本一览
python脚本如下,结构比较简单,基本功能是根据已有的名单去统计群里面没有参加接龙的人员和人数。
脚本只涉及到python自带的库。并且在运行时需要读取同目录下的两个txt文件。最后打印出没有统计结果。
import os
str_full_name=[]
with open('namestrList.txt','r',encoding='utf-8') as f:
for i in f.readlines():
str_full_name.append(i.replace("\n",''))
dic_name = {}
for i in range(str_full_name.__len__()):
dic_name[str_full_name[i]]=0
def cherry_pick(lists,names_dic):
# 筛选出有人的行,并进行整理,得到姓名,对应names_dic赋值为1.
flag=0
for i in range(len(lists)):
if lists[i][0:2] == '2.' or flag==1:
flag=1
else:
continue
firstnames_origin = lists[i].split('.')[1].lstrip()#包含班级信息
# firstnames_origin = firstnames_origin.split(" ")[0]
idx_str=0 #第几个是姓名
found_flag=0
for str_ in firstnames_origin:
for firstname in list(names_dic.keys()):
if str_ == firstname[0]:
# 筛选出姓名字符
found_flag=1
name=firstnames_origin[idx_str:].split(" ")[0]
names_dic[name]=1
break
if found_flag==1:
break
idx_str +=1
return names_dic
def pick_no_respond(dic):
num=0
for key in dic.keys():
if dic[key] == 0:
num+=1
print(f"暂未参与接龙:{key}")
print(f"未参与接龙人数:{num}")
with open('wechatList.txt','r',encoding='utf-8') as lists:
people_lists=lists.readlines()
names_dic=cherry_pick(people_lists,dic_name)
pick_no_respond(names_dic)
os.system("pause")
1.1 程序编程本身可能出现的问题
(1)UnicodeDecodeErro 报错
UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 2:
解决方法:
打开的文件中有中文字符,所以在打开txt时需要加上encoding='utf-8'
例如with open('wechatList.txt','r',encoding='utf-8')
(2)脚本运行后一闪而过
解决方法:
在程序运行最后一行添加os.system("pause")
import os
os.system("pause") #放在程序运行最后一行
1.2 windos终端打开python脚本遇到的问题
(1)不知道如何在文件夹调出终端
在文件夹空白处,单击右键是无法找到终端选项的。正确的做法是:
在此文件夹窗口内空白区域,Shift + 右键单击,从菜单中选择"在此处打开Powershell窗口"的项;
(2)无法退出
在终端使用python命令后,用惯了在linux终端直接ctrl + D退出,在windos下面发现退不出来。查了一下,需要使用:
Ctrl + Z + Enter
2.打包方法
参考这个链接:添加链接描述
简单描述:
(1)安装pyinstaller
pip install pyinstaller
(2)打包python
打包exe
若需将xxx.py文件打包,只需在终端执行:
pyinstaller -F xxx.py
注:终端需切换至xxx.py文件所在目录下。
常用可选项及说明:
-F:打包后只生成单个exe格式文件;
-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件;
-c:默认选项,使用控制台(就是类似cmd的黑框);
-w:不使用控制台;
-p:添加搜索路径,让其找到对应的库;
-i:改变生成程序的icon图标。
生成的exe位于dist
文件夹下,直接复制出来就可以运行了。