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

2024-09-27 04:29:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

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

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

提前谢谢你的帮助


Tags: 文件数据fromimport目录内容列表foo
1条回答
网友
1楼 · 发布于 2024-09-27 04:29:01

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

见:

关于惰性子模块导入的报价:

# lib/__init__.py

import importlib

__all__ = ['submod', ...]

def __getattr__(name):
    if name in __all__:
        return importlib.import_module("." + name, __name__)
    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")

# lib/submod.py

print("Submodule loaded")
class HeavyClass:
    ...

# main.py

import lib
lib.submod.HeavyClass  # prints "Submodule loaded"

相关问题 更多 >

    热门问题