首页 > 解决方案 > 如何“刷新”文件中的变量

问题描述

我希望将变量存储在.py文件中并导入到主 Python 程序中。

让我用代码解释一下这个问题。在我的主文件夹中,我有以下文件:

testcode包含以下代码:

import pprint

while __name__ == '__main__':
    import testmodule
    variableFromFile=testmodule.var
    print("Variable from file is "+str(variableFromFile))
    print("Enter variable:")
    variable=input()
    Plik=open('testowymodul.py','w')
    Plik.write('var='+variable)
    Plik.close()

testmodule包含:

var=0

现在,当我启动testcode.py并作为变量输入时,1,2,3,4,5我得到以下输出:

Variable from file is 0
Enter variable:
1
Variable from file is 0
Enter variable:
2
Variable from file is 0
Enter variable:
3
Variable from file is 0
Enter variable:
4
Variable from file is 0
Enter variable:
5
Variable from file is 0
Enter variable:

但是我想每次在屏幕上打印这个变量时都刷新它,所以我希望在这一行:

print("Variable from file is "+str(variableFromFile))

更新变量的值。相反,我只输出变量的第一个值,所以程序每次都打印 0。只有重新启动程序才会刷新 的值var

有没有办法从文件中导入变量,在运行时更改它们,然后稍后在脚本中使用它们的更新值?

标签: pythonimport

解决方案


我相信你的基本问题源于 testmodule.py 文件中变量的使用。如您所写,您的代码会导入此文件,因此 pyhton 解释器将 testmodule.var 的值分配给加载时存在的内容。由于 Plik.write('var='+variable) 正在创建格式为“var = n”的文本字符串,因此尝试更新变量的代码未按预期方式工作。因此,后续尝试导入 testmodule 并获取 testmodule.var 变量将导致 0 值。

要解决这个问题,正如@JONSG 所建议的那样,需要您放弃导入上下文并按照以下方式执行一些操作:

#Contents of testmodule.txt file
0  

#Contents of the testcode.py file
def readVar(fn):
    with open(fn, 'r') as f:
        return f.read().strip()
    
def writeVar(fn, val):
    with open(fn,'w') as f:
        f.write(val)

def runcode():        
    varfile = 'testmodule.txt'  #Assumes testmodule.txt is in same folder as code
    variableFromFile= readVar(varfile)
    print("Variable from file is "+str(variableFromFile))
    variable=input("Enter variable: ")
    writeVar(varfile, variable)


def main():
    runcode()


if __name__ == "__main__":
    main()
    

现在每次运行文件时,都会加载最新的变量数据,然后用新值更新。


推荐阅读