在转化为exe的过程中,还出现一个有意思的事情,用pyinstaller转为exe后,一输入字符就立刻闪退,都不知道到底怎么回事。在网上找到一个办法,在cmd窗口中,把exe文件拖入再运行,果然出现了提示“UnicodeDecodeError:: ‘utf-8’ codec can’t decode byte 0xc8 in position 0: invalid contin”,果断搜索之,然后发现在打开txt文件的open()函数里,把’r’替换成
- encoding="unicode_escape”
以下是全文:
- import xlrd
- import sys
- from time import sleep
- import os
- data = xlrd.open_workbook('E:/Documnet/工作/Contact/login.xlsx')
- # 以下是对sheet的操控
- sheet1 = data.sheet_by_index(0) # 定义sheet的办法,与下方sheet2的定义方法等价
- # 以下是对行,列的操控
- hang = sheet1.nrows
- lie = sheet1.ncols
- # 定义1个空字典和2个空列表
- loginin={}
- list_name = []
- id_card = []
- # 从Excel里取数得到字典,作为存储登录用户名和密码的工具
- def db(list_name,id_card):
- for i in range(hang):
- name = sheet1.cell_value(i,0)
- list_name= list_name + [name]
- card = str(sheet1.cell_value(i,1))
- id_card = id_card + [card]
- loginin[list_name[i]] = id_card[i]
- return loginin
- login = db(list_name,id_card)
- # print(loginin)
- print('欢迎使用“员工联系方式查询系统V1.0”,如有任何问题,请发邮件至XXX\n输入后请按“回车键”继续\n')
- # 该部分代码为登录部分,其中登录时会对登录人用户名密码进行校验,且能记录出错超过3次账户
- for i in range(3):
- loginname = input("请输入用户名(您的姓名):")
- with open('E:/Documnet/工作//锁定账户.txt', 'r') as lock_name:
- for count in lock_name.readlines():
- if loginname in count:
- print("该账号已被锁定,如需解锁,请发送邮件到xxx申请解锁")
- sleep(60)
- sys.exit()
- password = str(input("请输入密码(身份证号码后四位):"))
- while loginname not in login.keys():
- print('用户名密码不匹配,请重输' + '\n')
- break
- # 文章结尾有一段代码,似乎可以替代以下这段(以下这段来自其他人的代码)
- with open('E:/Documnet/工作/登录数据存储.txt', 'rb') as count_sum:
- for count in count_sum.readlines():
- if loginname in login.keys() and password == login[loginname]:
- print("登录成功!")
- i = 3
- break
- print('用户名密码不匹配,请重新输入' + '\n')
- break
- if i == 3:
- break
- # 可替代代码结束
- # 以下代码控制:如果错误次数太多,会锁定帐号,且记录黑名单,申请后方能解锁
- if i == 2:
- print("输错3次,该账号已被锁定,如需解锁,请发送邮件到xxx申请解锁")
- # print(loginname)
- with open("E:/Documnet/工作/锁定账户.txt", 'a') as lock_name:
- lock_name.write("\n" + loginname)
- sleep(60)
- sys.exit()
- # 以下是从Excel里面取Keys和Values组成查询主数据库的字典
- data1 = xlrd.open_workbook('E:/Documnet/工作/Contact/contact.xlsx')
- # 以下是对Excel的操控
- sheet1 = data1.sheet_by_index(0) # 定义sheet的办法,与下方sheet2的定义方法等价
- hang = sheet1.nrows
- lie = sheet1.ncols
- bigdata={}
- index_name = []
- info = []
- def db(index_name,info):
- for i in range(hang):
- name = sheet1.cell_value(i,0)
- index_name= index_name + [name]
- company = '本部/公司: ' + str(sheet1.cell_value(i,1))
- benbu = '部门: ' + str(sheet1.cell_value(i,2))
- zhiwu = '职务: ' + str(sheet1.cell_value(i,3))
- cellphone = '手机: ' + str(sheet1.cell_value(i,4))
- phone = '座机: ' + str(sheet1.cell_value(i,5))
- info = info + [[company] + [benbu] + [zhiwu] + [cellphone] + [phone]]
- bigdata[index_name[i]] = info[i]
- return bigdata
- finaldata = db(index_name,info)
- # 以下是查询的主程序
- while True:
- for i in range(5):
- if i == 4:
- print('您输入的错误次数太多,自动退出')
- sleep(2)
- exit()
- print('请输入您需要查询的姓名:')
- see = input()
- if see == '':
- sys.exit()
- elif see not in finaldata:
- print('您输入的姓名不正确,请重输: ' + '\n')
- continue # 如果输入不正确,就会回到for的循环,如果错误5次,就会直接退出
- print('您所查询的同事所属部门及联系方式为:')
- print(str(finaldata.get(see,0)) + '\n')
- print('如果还需要继续查询,请继续输入名字,退出请回车:'+'\n')
- break
- if loginname in login and login[loginname] == password:
- print('登录成功!')
- break
- else:
- print("用户名密码不匹配,请重新输入")


雷达卡




京公网安备 11010802022788号







