Изменить каталог сохраненного файла внутри другого файла. Чисто и аккуратно. Нет беспорядка

Я сделал программу для регистрации и входа в систему, но файл данных, сохраненный программой, находится в том же каталоге, что и файл программы. Как изменить каталог для сохраненного файла в новый файл, чтобы не было беспорядка. Это моя программа (хотя новичок).

import pickle
while True:
    RegOrLog = raw_input('[Register/Login]:')
    if RegOrLog not in ('reg', 'register', 'REGISTER','log', 'login', 'LOGIN',\
                        'r','l'):
        print "Please enter 'register' if you dont have account"
        print "Please enter 'login' if you already registered"

    if RegOrLog in ('reg', 'register', 'REGISTER','r','Register'):
        count = 0
        while count < 1:
            regusrnm = raw_input('Enter your desire login name:')
            regusrnm = regusrnm.lower()
            regpswrd = raw_input('Enter your password:')
            while True:
                regage = raw_input('Enter your age:')
                if int(regage) not in range(1, 100):
                    print 'please enter apropriate value'
                else:
                    break

            while True:
                reggender = raw_input('State your gender:')
                if reggender not in ('male', 'female'):
                    print 'Are you an alien?'
                else:
                    break

            data = {"username": regusrnm, "password": regpswrd, "age": regage,\
                    "gender": reggender}
            pickle.dump( data, open( regusrnm, "wb" ) )
            RegOrLog = 'login'
            print 'Please login to your account for security purpose'
            break

    if RegOrLog in ('log', 'login', 'LOGIN','l','Login'):
        logusrnm = raw_input('Enter your username:')
        data = pickle.load( open( logusrnm, "rb" ) )
        count = 3
        while count >= 1:
            logpswrd = raw_input('Enter your password:')
            count = count - 1
            if logpswrd != data["password"]:
                print "You have",count, "attempt left"
                if count == 0:
                    print "The account doesn't exist or wrong password"
                    print 'Please register a new one'
                    break

            else:
                 print 'Welcome Back',data["username"]
                 break

2 ответа

Решение

Не стоит создавать отдельный файл для каждого пользователя. Используйте базу данных или отдельный файл для хранения пользовательской информации, и любое решение этой проблемы будет хакерским, но если вы все равно хотите это сделать, то делайте что-то вроде этого:

import pickle, os
user_folder = "user_data/"
if not os.path.exists(user_folder):
    os.makedirs(user_folder)
while True:
    RegOrLog = raw_input('[Register/Login]:')
    if RegOrLog not in ('reg', 'register', 'REGISTER','log', 'login', 'LOGIN',\
                        'r','l'):
        print "Please enter 'register' if you dont have account"
        print "Please enter 'login' if you already registered"

    if RegOrLog in ('reg', 'register', 'REGISTER','r','Register'):
        count = 0
        while count < 1:
            regusrnm = raw_input('Enter your desire login name:')
            regusrnm = regusrnm.lower()
            regpswrd = raw_input('Enter your password:')
            while True:
                regage = raw_input('Enter your age:')
                if int(regage) not in range(1, 100):
                    print 'please enter apropriate value'
                else:
                    break

            while True:
                reggender = raw_input('State your gender:')
                if reggender not in ('male', 'female'):
                    print 'Are you an alien?'
                else:
                    break

            data = {"username": regusrnm, "password": regpswrd, "age": regage,\
                    "gender": reggender}
            pickle.dump( data, open( user_folder + regusrnm, "wb" ) )
            RegOrLog = 'login'
            print 'Please login to your account for security purpose'
            break

    if RegOrLog in ('log', 'login', 'LOGIN','l','Login'):
        logusrnm = raw_input('Enter your username:')
        data = pickle.load( open( user_folder + logusrnm, "rb" ) )
        count = 3
        while count >= 1:
            logpswrd = raw_input('Enter your password:')
            count = count - 1
            if logpswrd != data["password"]:
                print "You have",count, "attempt left"
                if count == 0:
                    print "The account doesn't exist or wrong password"
                    print 'Please register a new one'
                    break

            else:
                 print 'Welcome Back',data["username"]
                 break

Ваш файл не сохраняется "в том же каталоге, что и программа", он сохраняется в любом текущем каталоге, когда выполняется скрипт. А способ хранения файла в другом месте довольно прост и очевиден: просто явно укажите полный абсолютный путь, в который вы хотите сохранить файл, чтобы open(),

Другие вопросы по тегам