numpy.savez从关键帧中删除前导斜杠

numpy.savez从关键帧中删除前导斜杠,numpy,Numpy,我正试图保存一组numpy数组,这些数组由使用savez生成的数据的绝对文件路径设置密钥。但是,当我使用load检索该数据时,前面的斜杠已从键中删除 >>> import numpy as np >>> data = {} >>> data['/foo/bar'] = np.array([1, 2, 3]) >>> data.keys() ['/foo/bar'] >>> np.savez('/tmp/te

我正试图保存一组numpy数组,这些数组由使用savez生成的数据的绝对文件路径设置密钥。但是,当我使用load检索该数据时,前面的斜杠已从键中删除

>>> import numpy as np
>>> data = {}
>>> data['/foo/bar'] = np.array([1, 2, 3])
>>> data.keys()
['/foo/bar']
>>> np.savez('/tmp/test', **data)
>>> data2 = np.load('/tmp/test.npz')
>>> data2.keys()
['foo/bar']

numpy.savez是否需要此行为?是否有解决方法或我做错了什么?

看起来剥离是由Python zipfile模块完成的,可能是在提取而不是在编写时完成的:

注意:如果成员文件名是绝对路径,则驱动器/UNC sharepoint和前导反斜杠将被删除,例如:///foo/bar在Unix上变成foo/bar,而C:\foo\bar在Windows上变成foo\bar。所有。。成员文件名中的组件将被删除,例如:..../../foo../../ba..r变为foo../ba..r。在Windows上,非法字符:、|、?、和*替换为下划线

写入在np.lib.npyio._savez中完成,首先写入tmpfile,然后写入zipf.writetmpfile,arcname=fname的归档文件


npz文件是一个zip归档文件。密钥是存档文件名。使用系统工具查看归档文件。它可能正在清理您的姓名以适应该角色。是的,似乎这与谁有/foo根目录有关?谢谢,这回答了这个问题。我在这里找到了使用base64编码/解码的答案,这给了我一个合理的解决方法
In [98]: np.savez('test.npz',**{'/foo/bar':arr})
In [99]: !unzip -lv test.npz
Archive:  test.npz
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
     152  Stored      152   0% 2017-05-24 19:58 ef792502  foo/bar.npy
--------          -------  ---                            -------
     152              152   0%                            1 file