【问题标题】:Is there a way to turn list elements into independent variables while referencing the original list?有没有办法在引用原始列表时将列表元素转换为自变量?
【发布时间】:2019-04-18 17:50:55
【问题描述】:

我想从一个目录中获取一种类型的所有文件 (.npy) 并将它们转换为命名变量,这些变量使用 numpy 中的 np.load 从 .npy 文件中调用数据。

我已经使用 glob 创建了一种类型的文件列表,但是我似乎找到了一个好方法来继续。

os.chdir("/Users/Directory/")
dir_path = os.getcwd()

file_names = sorted(glob.glob('*.npy'))
file_names = file_names[:]
for f in file_names:
    print(f)
EELS 10nmIF 16nm.npy
EELS 4nmIF 16nm.npy
EELS Background.npy

我希望输出的是一组具有名称的变量:

EELS 10nmIF 16nm
EELS 4nmIF 16nm
EELS Background

每个变量都会调用 .npy 文件中的数据,例如使用 np.load,这样基本上它看起来像这样:

EELS 10nmIF 16nm = np.load(dir_path + EELS 10nmIF 16nm.npy)
EELS 4nmIF 16nm = np.load(dir_path + EELS 4nmIF 16nm.npy)
EELS Background = np.load(dir_path + EELS Background.npy)

【问题讨论】:

    标签: python dictionary for-loop instance-variables


    【解决方案1】:

    您可以使用list comprehension 创建一个新的修剪文件名列表。

    variables = [f[0:-4] for f in file_names]
    

    然后你可以对这个列表的内容做任何你想做的事情,包括加载每个文件:

    for v in variables:
        np.load(dir_path + v + '.npy')
    

    或者,跳过上述步骤,直接加载所有文件:

    for f in file_names:
        np.load(dir_path + f)
    

    我可能错过了你的问题的重点,所以this answer 可能有你需要的东西。

    【讨论】:

    • 感谢您的建议。我认为这个答案接近答案,但是我正在寻找的是一个结果,其中“EELS 10nmIF 16nm.npy”成为我可以调用的变量,这样 [EELS 10nmIF 16nm] 将显示包含的数据数组通过变量。
    • 你打算如何调用变量?例如,在命令行或脚本的其他地方一次一个?关于为什么需要按文件名手动加载文件的更多信息会有所帮助。
    【解决方案2】:

    我不是 100% 确定,但我认为你不能在运行时在 python(或我知道的任何其他语言)中分配变量名,但你可以做的是使用以文件名为键的字典和然后使用一个对象作为包含文件数据的值

    【讨论】:

    • 再次想到你实际上可以通过拾取和操作代码的 AST 在 python 中做到这一点。但这会完全违背你想要做的事情的目的
    • 这在许多语言中确实是可能的,甚至在 python 中你也可以使用globals()["foo"]="bar" 来分配全局变量foo。但是,python 中不允许名称中包含空格的变量。
    猜你喜欢
    • 2017-12-21
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多