从文件中读取和写入变量

时间:2015-09-20 10:58:58

标签: file python-2.7 save

我正在尝试创建一个注册/登录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'

1 个答案:

答案 0 :(得分:0)

我现在明白你的问题了。文本文件只保存纯文本数据,因此,您无法创建文件,如果它是一个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'