【发布时间】:2015-04-22 22:21:30
【问题描述】:
我只是想知道该函数实际上是如何存储数据的。因为对我来说,它看起来完全陌生。假设我有以下代码:
import numpy as np
filename = "test.dat"
print(filename)
fileobj = open(filename, mode='wb')
off = np.array([1, 300], dtype=np.int32)
off.tofile(fileobj)
fileobj.close()
fileobj2 = open(filename, mode='rb')
off = np.fromfile(fileobj2, dtype = np.int32)
print(off)
fileobj2.close()
现在我希望文件中有 8 个字节,其中每个元素由 4 个字节表示(我可以接受任何字节序)。但是,当我在十六进制编辑器中打开文件(使用带有十六进制编辑器插件的记事本++)时,我得到以下字节:
01 00 C4 AC 00
5 个字节,我完全不知道它代表什么。第一个字节看起来像是数字,但接下来的内容很奇怪,肯定不是“300”。
但重新加载会显示原始数组。
这是我在 python 中不理解的东西,还是 notepad++ 中的问题? - 如果我选择不同的“编码”,我注意到十六进制看起来不同(嗯?)。另外:Windows 确实报告它有 8 个字节长。
【问题讨论】:
-
首先,
int32占用 4 个字节,而不是 2 个。 -
接下来,您是否尝试过在除 Notepad++ 之外的任何其他程序中读取文件?你可以在 Python 本身中很容易地做到这一点;而不是
off = np.fromfile(fileobj2, dtype=np.int32),只需执行off = fileobj2.read(),然后打印字节。你应该看到类似b'\x01\x00\x00\x00,\x01\x00\x00';如果您看到的是b'\x01\x00\xc4\xac\x00',那么您就知道是文件损坏了,而不是 Notepad++。 -
@abarnert 这实际上是一个错字(注意我已经说过“我期望 8 个字节......”)。嗯,notepad++ 似乎确实坏了,这很奇怪,以前从未发生过这种情况:/,我可以问/将这个问题转换为“如何使 notepad++ 与 hex 插件一起工作”还是这里太离题了?
-
您不应尝试将问题转换为不同的问题。只问一个新的。我认为新版本会在 SuperUser 之类的地方更受关注,但您应该阅读这两个站点(以及其他一些听起来相关的 Stack Exchange 站点)上的帮助并自行决定。
-
会不会跟notepad++版本或者插件有关系? sourceforge.net/p/notepad-plus/discussion/482781/thread/… 提到几年前 Npp 插件中的一个空字符问题。
标签: python numpy notepad++ hexdump