从文件中读取和写入变量
Reading and writing variables from file
我正在尝试创建一个 register/login CLI,但我不明白为什么当我尝试在登录部分使用它们时,我在寄存器文件中写入的变量稍后不起作用。
我认为这就像编写 abc="xyz"
然后读取该文件一样简单,但似乎并非如此。
###RegOrLog###
RegOrLog = str(raw_input('[Register/Log]:'))
###register the user detail###
if RegOrLog in('r', 'reg', 'register'):
reguser = raw_input('username:')
regpass = raw_input('password:')
regage = int(raw_input('age:'))
reggender = str(raw_input('gender:'))
###creating file for the user###
f = open(reguser, 'w')
f.write('password =' + repr(regpass) + '\n')
f.write('age =' + repr(regage) + '\n')
f.write('gender =' + repr(reggender) + '\n')
f.close()
RegOrLog = 'log'
###login as a user###
if RegOrLog in('l','log','login'):
loguser = raw_input('Login username:')
regpass = raw_input('password:')
#registered user#
regeduser = open(loguser, 'r')
regeduser = regeduser.read()
if regpass == password:
print 'Welcome', loguser
print 'You are', gender
print 'You are', age,'years old'
我现在明白你的问题了。文本文件只保存纯数据,因此,您不能像 Python 文件那样创建一个带有变量定义的文件,并期望当您再次读取该文件时所有这些变量都将被初始化。 Python 只会读取数据并将其分配给一个变量,该变量将包含您最初写入该文件的所有文本。
因此,总而言之,您将文本文件视为 python 文件,并期望 python 执行文本文件并创建变量。
但这不是那样的。你必须把数据存储在一个类似数据库的文件中(或者数据库本身),然后读取它,通过数据解析的方式,提取你之前写入文本文件的变量。
您可以手动完成,这不是很好,或者您可以使用一个名为 Pickle 的 Python 模块,它几乎可以处理您自己编写的所有内容,因此您只需使用这个模块在你的代码中。
如果您在 Google 中搜索 Pickle 模块,Python.org 网站提供了一个非常好的用法示例:
#Pickle Example
# Save a dictionary into a pickle file.
import pickle
favorite_color = { "lion": "yellow", "kitty": "red" }
pickle.dump( favorite_color, open( "save.p", "wb" ) )
# Load the dictionary back from the pickle file.
favorite_color = pickle.load( open( "save.p", "rb" ) )
# favorite_color is now { "lion": "yellow", "kitty": "red" }
那么,您将如何在您的代码中使用它?这很简单:
# RegOrLog
import pickle # new line!
RegOrLog = raw_input('[Register/Log]:') # why str()?
# register the user detail
if RegOrLog in('r', 'reg', 'register'):
reguser = raw_input('username:') # raw_input gives string by default, if you want other data type then you do have to convert it.
regpass = raw_input('password:')
regage = int(raw_input('age:'))
reggender =raw_input('gender:')
# creating file for the user
data = {"username": reguser, "password": regpass, "age": regage, "gender": reggender}
pickle.dump( data, open( "whatever_file_name", "wb" ) )
RegOrLog = 'log'
###login as a user###
if RegOrLog in('l','log','login'):
loguser = raw_input('Login username:')
regpass = raw_input('password:')
#registered user#
data = pickle.load( open( "whatever_file_name", "rb" ) )
if regpass == data["password"]:
print 'Welcome', loguser
print 'You are', gender
print 'You are', age,'years old'
我正在尝试创建一个 register/login CLI,但我不明白为什么当我尝试在登录部分使用它们时,我在寄存器文件中写入的变量稍后不起作用。
我认为这就像编写 abc="xyz"
然后读取该文件一样简单,但似乎并非如此。
###RegOrLog###
RegOrLog = str(raw_input('[Register/Log]:'))
###register the user detail###
if RegOrLog in('r', 'reg', 'register'):
reguser = raw_input('username:')
regpass = raw_input('password:')
regage = int(raw_input('age:'))
reggender = str(raw_input('gender:'))
###creating file for the user###
f = open(reguser, 'w')
f.write('password =' + repr(regpass) + '\n')
f.write('age =' + repr(regage) + '\n')
f.write('gender =' + repr(reggender) + '\n')
f.close()
RegOrLog = 'log'
###login as a user###
if RegOrLog in('l','log','login'):
loguser = raw_input('Login username:')
regpass = raw_input('password:')
#registered user#
regeduser = open(loguser, 'r')
regeduser = regeduser.read()
if regpass == password:
print 'Welcome', loguser
print 'You are', gender
print 'You are', age,'years old'
我现在明白你的问题了。文本文件只保存纯数据,因此,您不能像 Python 文件那样创建一个带有变量定义的文件,并期望当您再次读取该文件时所有这些变量都将被初始化。 Python 只会读取数据并将其分配给一个变量,该变量将包含您最初写入该文件的所有文本。
因此,总而言之,您将文本文件视为 python 文件,并期望 python 执行文本文件并创建变量。
但这不是那样的。你必须把数据存储在一个类似数据库的文件中(或者数据库本身),然后读取它,通过数据解析的方式,提取你之前写入文本文件的变量。
您可以手动完成,这不是很好,或者您可以使用一个名为 Pickle 的 Python 模块,它几乎可以处理您自己编写的所有内容,因此您只需使用这个模块在你的代码中。
如果您在 Google 中搜索 Pickle 模块,Python.org 网站提供了一个非常好的用法示例:
#Pickle Example
# Save a dictionary into a pickle file.
import pickle
favorite_color = { "lion": "yellow", "kitty": "red" }
pickle.dump( favorite_color, open( "save.p", "wb" ) )
# Load the dictionary back from the pickle file.
favorite_color = pickle.load( open( "save.p", "rb" ) )
# favorite_color is now { "lion": "yellow", "kitty": "red" }
那么,您将如何在您的代码中使用它?这很简单:
# RegOrLog
import pickle # new line!
RegOrLog = raw_input('[Register/Log]:') # why str()?
# register the user detail
if RegOrLog in('r', 'reg', 'register'):
reguser = raw_input('username:') # raw_input gives string by default, if you want other data type then you do have to convert it.
regpass = raw_input('password:')
regage = int(raw_input('age:'))
reggender =raw_input('gender:')
# creating file for the user
data = {"username": reguser, "password": regpass, "age": regage, "gender": reggender}
pickle.dump( data, open( "whatever_file_name", "wb" ) )
RegOrLog = 'log'
###login as a user###
if RegOrLog in('l','log','login'):
loguser = raw_input('Login username:')
regpass = raw_input('password:')
#registered user#
data = pickle.load( open( "whatever_file_name", "rb" ) )
if regpass == data["password"]:
print 'Welcome', loguser
print 'You are', gender
print 'You are', age,'years old'