从文件中读取和写入变量

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'