Python 如何从文件中只导入单个值?

Python 如何从文件中只导入单个值?,python,python-3.x,import,Python,Python 3.x,Import,我知道您可以使用“fromfooimportbar”,但是,这实际上仍然会导入所有数据。我之所以知道这一点,是因为我有一个包含变量的文件,其中一个变量包含大量数据。举一个伪例子,假设所讨论的变量是foo,它包含数字1-100000000,加载所有这些数字大约需要2分钟 这只是一个例子,实际数据要复杂得多 无论如何,其他变量只是个位数或小列表或目录。然而,当我尝试导入其中任何一个数据时,所用的时间与我尝试导入foo中的所有数据所用的时间一样长。同样,即使使用“From foo import bar

我知道您可以使用“fromfooimportbar”,但是,这实际上仍然会导入所有数据。我之所以知道这一点,是因为我有一个包含变量的文件,其中一个变量包含大量数据。举一个伪例子,假设所讨论的变量是foo,它包含数字1-100000000,加载所有这些数字大约需要2分钟

这只是一个例子,实际数据要复杂得多

无论如何,其他变量只是个位数或小列表或目录。然而,当我尝试导入其中任何一个数据时,所用的时间与我尝试导入foo中的所有数据所用的时间一样长。同样,即使使用“From foo import bar”表示法,这也是正确的

我能想到的唯一解决方案是将这些变量存储在单独的文件中,然后在需要时从文件集中只读取我需要的内容,因此,每当我需要导入某个内容时,除非它是变量foo,否则不会花费很长时间

当然,这不如将变量存储在一个文件中那么简单,所以我想知道是否有一种方法可以做到这一点,而不必同时导入所有内容

我会说,当导入一次时,再次运行程序只需要大约两秒钟,这很好,但是,我需要在多个模块中导入所述数据,因此我现在的设计非常不理想


感谢您提前提供的帮助。

导入模块时,将对其进行解释(执行模块脚本)。您所能做的就是为您的特殊重变量使用代理。请注意,在正常使用中,模块是单例的,因此只加载一次。来自foo导入栏的
只是将变量引用存储在
globals()
范围中的一种方法

见:

  • 在文件中
  • 惰性子模块在中导入
关于惰性子模块导入的报价:

#lib/uuu init.py
导入导入库
__全部uuu=['submod',…]
def_u_getattr__(名称):
如果名称出现在__;所有_;中:
返回importlib.import\u模块(“.”+名称,\u名称)
raise AttributeError(f“模块{u__名称{u!r}没有属性{name!r}”)
#lib/submod.py
打印(“加载子模块”)
重磅级:
...
#main.py
导入库
lib.submod.HeavyClass#打印“已加载子模块”

相关。似乎没有比将大数据放在单独的模块中更好的方法了。啊,我明白了,所以我想from-foo导入栏技术有助于解决名称冲突,并为方便起见(因此您不必总是使用foo.bar)。我一直认为这样做是为了节省加载时间,因为我认为这只是在分析导入的变量的值。如何为变量和/或数据设置代理?我以前从未听说过,但这似乎很有趣。@JimJam,有几种方法可以实现缓存/代理/延迟导入。有关现代方法,请参见我的编辑。