代码之家  ›  专栏  ›  技术社区  ›  Amazing Things Around You

使用数组变量python的名称保存文件

  •  0
  • Amazing Things Around You  · 技术社区  · 7 年前

    我愿意保存与变量同名的文件。见以下代码:

    training = np.arange(200)
    np.savetxt(training.txt,training)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'numpy.ndarray' object has no attribute 'txt'
    

    当我使用双引号时,它的作用是显而易见的:

    np.savetxt("training.txt",training)
    

    但是在我的程序中有不同的变量,我希望当我调用文件保存函数时,文件名应该自动作为变量名本身。
    例如,如果变量是 question answer 当我说 save() ,文件名应自动为 question.txt answer.txt
    建议我能做些什么来实现这个目标。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Matthieu Brucher    7 年前

    这没有什么好办法。python中的变量只是对实际对象的引用。名字无关紧要。

    您需要一种方法来存储具有给定名称的变量,这就是关联表的作用,这是 dict 在蟒蛇中。

    这类似于:

    variables={}
    variables["training"] = np.arange(200)
    for key, val in variables.items():
        np.savetxt(key, value)
    
        2
  •  1
  •   Anakhand    7 年前

    在python中使用标识符名称很麻烦(这并不是一种常见的做法)。你为什么不试着用字典呢?

    import np
    
    my_dict = dict()
    
    def save(name: str):
        np.savetext('{}.txt'.format(name), my_dict[name])
    
    my_dict['training'] = np.arange(200)
    save('training')
    
        3
  •  0
  •   vin    7 年前

    一种非常简单的方法是从本地符号表中获取变量名。如果你知道你只有一个数组,你可以简单地得到第一个结果。

    >>> 
    >>> import numpy as np
    >>> training = np.arange(200)
    >>> def getndarrayname(env):
    ...     return list(filter(lambda x: isinstance(env[x], np.ndarray), env.keys()))
    ... 
    >>> getndarrayname(locals())
    ['training']
    >>>