python - 如何“刷新”文件中的变量
问题描述
我希望将变量存储在.py
文件中并导入到主 Python 程序中。
让我用代码解释一下这个问题。在我的主文件夹中,我有以下文件:
- 测试代码.py
- 测试模块.py
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
。
有没有办法从文件中导入变量,在运行时更改它们,然后稍后在脚本中使用它们的更新值?
解决方案
我相信你的基本问题源于 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()
现在每次运行文件时,都会加载最新的变量数据,然后用新值更新。
推荐阅读
- model-view-controller - 关于通用存储库和 dbContext 的混淆
- asp.net - EF Code First 迁移在扩展身份角色类时创建额外的列
- vuejs2 - vuejs 将过滤器添加到由 json 响应生成的分页列表中
- excel - 试图从excel中的电子表格中整理一个包装清单
- r - r:ggplot2相关图
- python - 如何使用 Keras TimeseriesGenerator 为每 n 个训练样本抽取一个验证样本?
- javascript - Vuejs Router,条件加载 JavaScript 代码
- reactjs - 在组件之外访问 Formik 的值 | 反应
- parsing - AST 的最佳 ADT 表示
- node.js - 每次运行 gulp 时自动生成 TypeDoc 命令