如何修改模块中的变量和实例,并在运行时将其保存在python中

如何修改模块中的变量和实例,并在运行时将其保存在python中,python,module,runtime,Python,Module,Runtime,我有main.py,header.py和var.py 标题.py var.py main.py 在这一切之后,我的意思是在这个节目结束之后。我希望var.table和var.month被修改并保存在var.py中 在python中处理引用太令人困惑了 我错过了C&pointer。当程序结束时,所有值都将丢失,除非您先保存它们,然后在下次运行时加载它们。有多种不同的方法可以做到这一点;你想要哪一个取决于你拥有什么样的数据以及你在用它做什么 你永远不想做的一件事就是将任意对象打印到一个文件中,然后试

我有
main.py
header.py
var.py

标题.py

var.py

main.py

在这一切之后,我的意思是在这个节目结束之后。我希望
var.table
var.month
被修改并保存在
var.py

在python中处理引用太令人困惑了


我错过了C&pointer。

当程序结束时,所有值都将丢失,除非您先保存它们,然后在下次运行时加载它们。有多种不同的方法可以做到这一点;你想要哪一个取决于你拥有什么样的数据以及你在用它做什么

你永远不想做的一件事就是将任意对象打印到一个文件中,然后试着找出以后如何解析它们。如果您的任何问题的答案是
ast.literal\u eval
,则您保存的内容是错误的

要考虑的一件重要事情是你什么时候存钱。如果有人用^C退出您的程序,而您只在完全关闭时保存,则您所做的所有更改都将消失

努比/熊猫 Numpy和Pandas有自己的内置功能来保存数据。有关所有选项,请参见和,但基本选项包括:

  • 文本(例如):可移植格式,可在电子表格中编辑
  • 二进制(例如):小文件,快速保存和加载
  • Pickle(参见下文,但也包括内置函数):可以使用任意Python对象保存数组
  • 。如果您需要HDF5或NetCDF,您可能已经知道您需要它
字符串列表 如果您只有一个单行字符串列表,那么只需将它们写入文件并逐行读取。它很难变得更简单,而且很明显是人类可读的

如果每个值都需要一个简短的名称,或者需要单独的部分,但值仍然都是简单的字符串,那么您可能需要查看CFG/INI文件。但一旦你变得比这更复杂,就寻找一种不同的格式

Python源代码 如果您不需要保存任何内容,只需加载数据(您的用户可能需要编辑),您可以将Python本身作为一种格式使用,可以是导入的模块,也可以是执行的脚本文件。这当然是非常危险的,但是对于一个配置文件来说,这个配置文件只由那些在他们的计算机上已经有了你的全部源代码的人来编辑,这可能不是一个问题

JSON和朋友们 可以将单个dict或列表保存到文件并重新加载。JSON是,大多数其他语言也可以加载和保存它。JSON文件是可人工编辑的,但并不美观

JSON dict和list可以是嵌套结构,内部包含其他dict和list,还可以包含字符串、float、bool和None,但不包含其他内容。您可以使用转换器为其他类型扩展
json
库,但这需要做一些工作

是(几乎)JSON的超集,更易于扩展,并允许更漂亮的人类可编辑文件。它在标准库中没有内置支持,但在PyPI上有许多实体库,如

JSON和YAML只能为每个文件保存一个dict或列表。(该库将允许您保存多个对象,但您无法将其加载回去,因此请小心。)最简单的方法是创建一个包含所有数据的大目录或列表。但是,它允许您在一个文件中保存多个JSON dict,而代价是人为的可读性。您可以通过
为文件中的行加载它:obj=json.loads(obj)
,如果您知道自己在做什么,您可以使用标准库保存它,但您也可以找到愿意为您这样做的第三方库

键值存储 如果您想要存储的内容适合于dict,但您希望它一直保存在磁盘上,而不是显式地保存和加载,那么您需要一个键值存储

是一种旧的但仍然是函数格式,只要您的键和值都是小字符串,并且没有太多的字符串。Python使
dbm
看起来像
dict
,因此您根本不需要更改大部分代码

扩展
dbm
以允许您保存任意值,而不仅仅是字符串。它通过使用Pickle(见下文)来实现这一点,这意味着它具有相同的安全问题,而且速度也可能较慢

更强大的键值存储(以及相关的东西)通常称为NoSQL数据库。现在有很多;是一种流行的选择。还有很多东西要学,但值得一学

CSV 表示“逗号分隔值”,尽管也有使用空格或其他字符的变体。CSV是

只要所有成员都是字符串或数字,当您有一个具有相同字段的对象列表时,这是一种很好的格式。但不要试图把它延伸到那之外

CSV文件只能作为文本进行人工编辑,但可以在Excel或Google Sheets等电子表格程序中轻松编辑

泡菜 设计用于保存和加载任何内容。如果您正在读取用户提供的任意pickle文件,这可能会很危险,但也可能非常方便。Pickle实际上无法保存和加载所有内容,除非您做了大量工作来添加对某些类型的支持,但是有一个名为的第三方库,它将支持扩展了很多

Pickle文件根本不是人类可读的,并且只与Python兼容,有时甚至与Python的旧版本也不兼容

SQL 最后,您可以始终构建完整的关系数据库。这听起来很可怕

Python在标准库中有一个名为Build的数据库

如果看起来太复杂,你可能需要考虑一下,它可以让你存储和查询数据而不必学习SQL语言。或者,如果你四处搜索,就会发现有很多fanc

import var
class table():
    def __init__(self, name):
        self.name = name
month = "jen"
table = "" # tried to make empty container which can save table instance but don't know how
import header
import var

var.table = header.table(var.month)
var.month = "feb"