[英]Overwrite a python file while using it?
我有第一个文件(data.py):
database = {
'school': 2,
'class': 3
}
我的第二个python文件(app.py)
import data
del data.database['school']
print(data.database)
>>>{'class': 3}
但是在data.py中没有任何改变吗? 为什么? 以及如何从我的app.py中更改它?
del data.database['school']
修改内存中的数据,但不修改源代码。
恕我直言,修改源代码来管理数据的持久性不是一个好习惯。
您可以使用数据库,csv文件,json文件...
要详细说明Gelineau的答案:在运行时,您的源代码将转换为机器可用的表示形式(称为“字节码”),该表示形式将被加载到进程内存中,然后执行。 当执行del data.database['school']
语句(以字节码形式)执行时,它仅修改内存中的data.database
对象,而不修改(希望如此)源代码本身。 实际上,您的源代码不是“程序”,而是运行时过程的蓝图。
您要查找的内容称为数据持久性(“记住”数据是程序执行之间的最后一个已知状态的数据)。 解决此问题的方法很多,从简单的“将其写入文本或二进制文件,然后在启动时重新读取”到成熟的多服务器数据库系统。 哪种解决方案适合您,取决于您程序的需求和约束条件,是否需要处理并发访问(多个用户/多个进程同时编辑数据)等,因此,实际上并没有一个“千篇一律”的答案。 对于最简单的用例(单用户,小型数据集等), json
或csv
文件写入到磁盘或简单的二进制键值:像值的文件格式anydbm
或shelve
(无论是在Python的STDLIB)可能是不够的。 一旦事情变得更加复杂,SQL数据库通常是您最好的选择(难怪为什么它们仍然是行业标准并且会长期存在)。
在所有情况下,数据持久性都不是“自动的”,您将必须编写一些代码以确保您的更改被及时保存。
正如您要实现的,基本上与文件操作有关。 因此,当您导入数据时,它只是将文件的实例加载到内存中并从新文件创建引用,即。 app.py。 因此,如果您在app.py中对其进行修改,那么它只是修改了RAM中而不是实际文件存储在硬盘中的实例。
如果要更改另一个文件的源代码“这不是很好的做法”,则可以使用文件操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.