繁体   English   中英

使用时覆盖python文件吗?

[英]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对象,而不修改(希望如此)源代码本身。 实际上,您的源代码不是“程序”,而是运行时过程的蓝图。

您要查找的内容称为数据持久性(“记住”数据是程序执行之间的最后一个已知状态的数据)。 解决此问题的方法很多,从简单的“将其写入文本或二进制文件,然后在启动时重新读取”​​到成熟的多服务器数据库系统。 哪种解决方案适合您,取决于您程序的需求和约束条件,是否需要处理并发访问(多个用户/多个进程同时编辑数据)等,因此,实际上并没有一个“千篇一律”的答案。 对于最简单的用例(单用户,小型数据集等), jsoncsv文件写入到磁盘或简单的二进制键值:像值的文件格式anydbmshelve (无论是在Python的STDLIB)可能是不够的。 一旦事情变得更加复杂,SQL数据库通常是您最好的选择(难怪为什么它们仍然是行业标准并且会长期存在)。

在所有情况下,数据持久性都不是“自动的”,您将必须编写一些代码以确保您的更改被及时保存。

正如您要实现的,基本上与文件操作有关。 因此,当您导入数据时,它只是将文件的实例加载到内存中并从新文件创建引用,即。 app.py。 因此,如果您在app.py中对其进行修改,那么它只是修改了RAM中而不是实际文件存储在硬盘中的实例。

如果要更改另一个文件的源代码“这不是很好的做法”,则可以使用文件操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM