import os import shelve class Userdata: def closeUserfile(self): self.userdatafile.close() def saveUser(self, user, userdata): self.user = user self.__checkreadFile() if self.__verifyUser(): self.userdatafile[self.user] = userdata print('User data saved.') self.userdatafile.close() def saveUserdata(self, userdata): self.__checkreadFile() #self.userdatafile[self.user] = userdata if self.__verifyUser(): self.userdatafile[self.user] = userdata print('User data saved.') self.userdatafile.close() def addUser(self, user): self.user = user self.__checkreadFile() usercheck = self.__verifyUser() if not usercheck: self.userdatafile[self.user] = {} print('User added.') else: print('User already exists.') return usercheck self.userdatafile.close() def retrieveUser(self, user): self.user = user self.__checkreadFile() if self.__verifyUser(): self.userdata = self.userdatafile[self.user] self.userdatafile.close() return self.userdata def retrieveUsername(self): return self.user def retrieveUserlist(self): userlist = [] self.__checkreadFile() for user in self.userdatafile: if not user == 'High Score': userlist.append(user) self.userdatafile.close() return userlist def isUserdatempty(self): check = False self.__checkreadFile() if len(self.userdatafile) == 0: check = True self.userdatafile.close() return check def returnFirstuser(self): self.__checkreadFile() userlist = list(self.userdatafile.keys()) firstuserkey = userlist[0] self.userdatafile.close() return [firstuserkey, self.userdatafile[firstuserkey]] def __verifyUser(self): check = False if self.user in self.userdatafile: check = True return check def verifyUser(self, username): check = False self.__checkreadFile() if username in self.userdatafile: check = True self.userdatafile.close() return check def __readFile(self): self.userdatafile = shelve.open(self.pathfile, 'w') def __createFile(self): self.userdatafile = shelve.open(self.pathfile, 'n') def __checkreadFile(self): file = '' if os.name == 'nt': file = '\\yourdatafilenamehere' elif os.name == 'posix': file = '/yourdatafilenamehere' self.pathfile = self.path+ file if os.access(self.pathfile, os.F_OK): if os.access(self.pathfile, os.R_OK): if os.access(self.pathfile, os.W_OK): self.__readFile() else: self.__createFile() else: self.__createFile() else: self.__createFile() ## def checkUser(self): ## ## self.__checkreadFile() ## self.__verifyUser() def __init__(self): self.path = os.getcwd() self.user = '' #self.__checkreadFile()
Something of an alternative shelve object database storage class alternative code offering outside the CouchDB. I'd mention some issues experienced with Python shelve objects:
- Heavy read write loads to shelve objects aren't good at least with respect read write from permanent (disk based) memory storage. Thus I've typically housed much of the data in such a way that reading from disk ensures likely all the information (in terms of transient storage) will be there to minimise read/write callbacks. Thus I actually wrote a database program which parses additionally embedded dictionary trees for reading such data. In effect, you hadn't need develop something like an sql database program to do this, since the pertinent data that you needed for your program may remain exact in so far as object data were concerned. You just need to make sure that you have it structured, in this case, in a way, so that your data reader knows where to find the data in the tree hierarchy in doing so. If you need some alternate method for storing dynamic data to a given database, you might consider using python's sql module interfaces, this fyi provides some basic sql code examples. I'll post my tree structure interface here probably in a day or so, that at least provides how an extensive data tree process handling might look like.
-You may notice above, generally after reading calls to a shelve object file, such shelve object file is closed. This is done per recommends of python, and as I've experienced, if you don't track closing and opening, errors can result when attempting to re open an already open file or reading from a closed file. Thus, wise to make sure that routine orderliness applies here.
In the __checkreadFile() function call above, the program attempts to verify that the datafile exists in the installation directory path...this installation directory path is established by the command os.getcwd() . If the file exists it reads, otherwise, it needs to be created.
Generally idea here is that a user data can be stored or retrieved, and user key information can be searched for, and lists of users can be furnished through this given class .
No comments:
Post a Comment