2013-02-12 96 views
0

我需要一点帮助覆盖python变量。这是我能给的最好的例子。如果有人打开了我的程序(.exe.py),这是上来:在Python中保存并覆盖变量

var = 5 
var = raw_input("Enter the new variable value: ") ##THE PERSON ENTERS 3 
var = 3 

现在,用户关闭文件/程序,接下来他们打开它的时候,他们希望程序记得var = 3 ,因此它用var = 3覆盖var = 5。我不知道这是否可能,但如果是这样,你能让我知道吗?

要说明:我希望我的.py.exe记住一个变量已更改,并用新的变量覆盖旧变量,所以下一次他们打开文件时,变量已被更改。

+1

您要使用的文件I/O,并明确写入和读取类似设置。首先阅读一个体面的[初学者的Python教程](http://wiki.python.org/moin/BeginnersGuide/NonProgrammers)。 – 2013-02-12 18:36:58

+1

我建议你在任何你正在关注的python教程中进一步学习。你所要做的就是持久性,在你进入关于持久性的部分之前,你会有一些基本的知识。 – JosefAssad 2013-02-12 18:38:05

+0

@Jordan你想让程序或其他文件保持改变吗?如果是第一种情况,程序将不得不改变它自己的文件,我恳求这是可能的,但它需要一些技巧。如果是第二种情况,它是持久性的 – eyquem 2013-02-12 20:24:15

回答

2

您可以使用pickle模块,JSON或什么的:P

+2

不是给予人们答案的粉丝,这些答案仅仅是字面上正确的,并且不考虑上下文。在我看来,这里的背景是提问者错过了很多编程基础知识,只会沮丧地跳到使用像腌菜这样的模块。提问者的挑战是教育性的,而不是技术性的。 – JosefAssad 2013-02-12 18:39:48

4

你需要以某种方式保存的值,例如文件,数据库,或者一些服务。

例如,使用simple file

import io,os 
try: 
    with io.open('~/.jordan_last_value', 'r', encoding='utf-8') as f: 
     var = f.read() 
except IOError: # Read failed 
    var = raw_input('Enter the new variable value') 

    # Save value to disk 
    with io.open('~/.jordan_last_value', 'w', encoding='utf-8') as f: 
     f.write(var) 

print ('Current value is ' + var) 

正如你所看到的,这可能是有点复杂,所以你可能要刷新你的file handling知识。而且,这个示例代码可以存储字符串。

如果您希望能够存储更复杂的对象,则需要先将它们从字节串转换为字节串的方法。看看jsonpickle模块。

0

使用pickle模块:

import pickle 
try: # try to open the file 
    with open('jordan_data.pkl', 'r+') as f: 
     var = pickle.load(f) 
except IOError: # if it doesn't exist, get new input 
    var = raw_input("Enter the new variable value: ") # THE PERSON ENTERS 3 
    with open('jordan_data.pkl', 'a+') as f: # 'a' will create the file if it doesn't exist 
     pickle.dump(var, f) # then, save the file 
+0

你不需要'关闭' - with语句已经完成了。另外,您应该以二进制模式打开文件。另外,'pickle'的重命名使得代码难以理解。 – phihag 2013-02-12 19:08:10