Python Numpy savez将我的密钥解释为文件名->;IOError

Python Numpy savez将我的密钥解释为文件名->;IOError,python,numpy,Python,Numpy,我正在使用as保存numpy数组。作为键,我使用从中加载数据的文件名。但似乎savez正试图以某种方式使用文件名。我该怎么办?我希望避免剥离其路径和结尾的文件名 >>> import numpy >>> arrs = {'data/a.text': numpy.array([1,2]), 'data/b.text': numpy.array([3,4]), 'data/c.text': numpy.array([

我正在使用as保存numpy数组。作为键,我使用从中加载数据的文件名。但似乎
savez
正试图以某种方式使用文件名。我该怎么办?我希望避免剥离其路径和结尾的文件名

>>> import numpy
>>> arrs = {'data/a.text': numpy.array([1,2]),
            'data/b.text': numpy.array([3,4]),
            'data/c.text': numpy.array([5,6])}    
>>> numpy.savez('file.npz', **arrs)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/numpy/lib/io.py", line 305, in savez
    fid = open(filename,'wb')
IOError: [Errno 2] No such file or directory: '/tmp/data/c.text.npy'
导入numpy >>>arrs={'data/a.text':numpy.array([1,2]), “data/b.text”:numpy.array([3,4]), 'data/c.text':numpy.array([5,6])} >>>numpy.savez('file.npz',**arrs) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 savez中的文件“/usr/lib/python2.6/dist packages/numpy/lib/io.py”,第305行 fid=打开(文件名为“wb”) IOError:[Errno 2]没有这样的文件或目录:'/tmp/data/c.text.npy'
可能
savez
使用dict中给定的名称构建临时文件。文件名中有一个
/
。当
savez
创建文件时,它会尝试使用给定的名称和扩展名
.npy
(即
data/c.txt.py
)作为临时目录中的文件名。但是,新路径会导致不存在的子目录
temp
,从而导致错误

解决方案是:要么用其他内容替换斜杠,要么转义文件名


(我之前的回答太复杂,可能是错误的。)

您可以在将密钥传递到
savez
功能之前对其进行编码和解码

>>> import numpy
>>> import base64
>>> arrs = {'data/a.text': numpy.array([1,2]),
            'data/b.text': numpy.array([3,4]),
            'data/c.text': numpy.array([5,6])}
>>> numpy.savez('file.npz', **dict((base64.urlsafe_b64encode(k), v)
                                    for k,v in arrs.iteritems()))
>>> npzfile = numpy.load('file.npz')
>>> decoded = dict((base64.urlsafe_b64decode(k), v)
                   for k,v in npzfile.iteritems())
>>> decoded
{'data/c.text': array([5, 6]),
 'data/a.text': array([1, 2]),
 'data/b.text': array([3, 4])}

嗯,你用
c.txt
调用numpy.savez,错误是关于
c.text
?谢谢,我把示例放在一起时出错了。