志存高远的zxs 2023-02-26 15:11 采纳率: 26.7%
浏览 35
已结题

python资源文件!

我写了一个登录注册并可注销的程序,将它转换成exe后试运行却发现用户信息无法存储了(注:用的资源文件的pyinstaller打包方式,资源文件是user.txt,具体转换方法见下面这个网址:https://xiaokang2022.blog.csdn.net/article/details/127585881?spm=1001.2014.3001.5502
代码如下:

def wrapper(function):
    def _open(*args, **kw):
        """ 修改路径 """
        args_list = list(args)
        key = '/'.join(__file__.split('\\')[:-1]) + '/'
        args_list[0] = key + args[0]
        if kw.get('file'):
            kw['file'] = key + kw['file']
        return function(*args_list, **kw)
    return _open
open = wrapper(open)
from os import system
from sys import exit
from random import randint
import time
from time import sleep
MAX_USERS=2
user_file='user.txt'
error_time=4
mode=False
user_name=''
user_passwd=[None,None]
try:
   f=open(user_file,'r')
   user_dict=eval(f.read())
   f.close()
except FileNotFoundError:
   f=open(user_file,'w')
   f.write("{'Administrator':'123456'}")
   f.close()
   user_dict={'Administrator':'123456'}
while True:
   user_name=str(input('请输入用户名>'))
   if user_name not in user_dict:
      if user_name=="注销用户":
         while True:
            user_name=input("请输入要注销用户名:")
            user_passwd[0]=input("请输入要注销用户名的密码:")
            if user_name=="Administrator":
               print("这是系统默认用户,不可注销!")
               continue
            if user_name not in user_dict:
               print("用户名或密码错误,请重新输入!")
               continue
            else:
               if user_passwd[0]!=user_dict[user_name]:
                  print("用户名或密码错误,请重新输入!")
               else:
                  dict=user_dict
                  dict.clear()
                  f=open(user_file,'w')
                  f.write("{'Administrator':'123456'}")
                  f.close()
                  user_dict={'Administrator':'123456'}
                  print("注销成功,去注册登录你的新用户吧!")
                  break
      elif len(user_dict)>=MAX_USERS:
          print("用户不存在,且数量已达到最大值,无法继续注册,请输入正确用户名!")
          time.sleep(1)
          continue
      else:
          print("用户不存在,将执行注册操作。")
          if ' ' in user_name:
             print('\aErr: 用户名中不能有空格')
          elif user_name=='':
             print('\aErr: 用户名不能为空')
          else:    
             while True:
                user_passwd[0]=str(input('请设置密码>'))
                if ' ' in str(user_passwd[0]):
                   print('\aErr: 密码中不能含有空格。')
                elif user_passwd[0]=='':
                   print('\aErr: 密码不能为空。')
                elif len(user_passwd[0])<6:
                   print('\aErr: 密码长度太短,至少6位。')
                else:
                   user_passwd[1]=str(input('请再次输入密码>'))
                   if user_passwd[0]!=user_passwd[1]:
                      print('\aErr: 两次输入的密码不一致。')
                   else:
                      print('注册成功!\n\n请重新登录:')
                      user_dict[user_name]=user_passwd[0]            
                      f=open(user_file,'w')
                      f.write(str(user_dict))
                      f.close()
                      break
   else:    
      while error_time!=0:
         user_passwd[0]=input('请输入密码 4次机会/'+str(error_time)+'>')
         if user_passwd[0]!=user_dict[user_name]:
            print('\aErr: 密码错误')
            error_time=error_time-1
         else:
            mode=True
            break
      else:
         print('\n\a\a因错误次数过多,进行验证码确认')
         import random
         mc=''  
         for i in range(0,6):
            ms=random.randint(0,9) 
            mc+=str(ms)
         print("将会在15秒内发送验证码,请耐心等待...")
         eh=random.randint(1,15)
         time.sleep(eh)
         print(mc)
         mi=input("请输入验证码:")
         if mi!=mc:
            print('\aErr: 验证码错误!')
            for i in range(3,-1,-1):
               print('\b'*23+'程序将在 '+str(i+1)+' 秒后退出...',end='',flush=True)
               sleep(1)
            exit(0)
         else:
            error_time=4
   if mode==True:
      break
print('登录成功...')

请各位发表意见,解决这个问题。蟹蟹!

  • 写回答

2条回答 默认 最新

  • GISer Liu 2023-02-26 16:08
    关注

    以下答案引用自GPT-3大模型,请合理使用:

    。
    
    你的程序没有考虑exe文件运行后的路径将会发生改变的情况,这也是出问题的原因之一。下面提供简单的代码修改建议:
    
    def wrapper(function):
        def _open(*args, **kw):
            """ 修改路径 """
            import os
            current_path = os.getcwd()  # 获取当前的绝对路径
            args_list = list(args)
            key = current_path + '\\'  # 使用拼接的当前绝对路径
            args_list[0] = key + args[0]
            if kw.get('file'):
                kw['file'] = key + kw['file']
            return function(*args_list, **kw)
        return _open
    open = wrapper(open)
    
    这样修改后,就可以在不同路径下都能正确存储和读取用户信息了。
    

    如果我的回答解决了您的问题,请采纳我的回答

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月26日

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab