我想将所有npy/npz文件加载到我的交互式python shell中,所以不必:

var1 = np.load('var1.npy')

为每一个人。我制作了这个脚本,但是它不起作用,因为它的变量名称空间就在脚本中(假设缩进是正确的)。正确的方法是什么?
def load_all():
import numpy as np
from os import listdir
from os.path import isfile, join
from os import getcwd

mypath = getcwd()
print 'loading all .npy and .npz files from ',mypath
files = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]

for f in files:
    if f[-4:] in ('.npy','.npz'):
        name = f[:-4]+'_'+f[-3:]
        print 'loading', f, 'as', name
        var = np.load(f)
        exec(name + " = var")

最佳答案

我会用glob。例如,glob.glob('*.np[yz]')将返回当前目录中所有.npy和.npz文件名的列表。然后可以遍历该列表,依次加载每个文件名您是否尝试将加载结果放入与文件名匹配的本地变量中还有比这更安全的设计-我会用一本字典,把名字当作键,比如:

numpy_vars = {}
for np_name in glob.glob('*.np[yz]'):
    numpy_vars[np_name] = np.load(np_name)

09-16 03:07