numpy吧 关注:62贴子:78
  • 4回复贴,共1

NumPy直接读写数据的文件格式

只看楼主收藏回复

分别介绍下CSV(逗号分割符文件),`.npy`文件,`.npz`文件的文件格式


IP属地:黑龙江1楼2024-09-04 11:53回复
    首先是CSV文件,其全称为Comma-Separated Values,即逗号分隔值文件,有时也叫做字符分隔值文件。其本质上是一个纯文本表格式文件,纯文本与二进制相对,表示其以可读字符存储数据;表格式意味者其可以存储二维数据(n行m列,m为1时,表示只有一列数据)。
    二维数据体现为n行文本,每行数据存储的m列数据通过特定符号分隔,通常是英文逗号`,`,另外常用的风格符号也包括空格,制表符`\t`,操作符`|`,连字符`-`等。下面是一个文件例子。
    CSV文件可以使用Excel打开,Excel也可以将xlsx文件保存为CSV文件(可能会丢失信息)。
    这个文件的前3行分别为文件头、作者、数据各列含义,之后则是数据本体

    当然文件中的数据也可以是非数值类型,例如下面的第一列中的编程语言名称。


    IP属地:黑龙江本楼含有高级字体3楼2024-09-04 15:41
    回复
      `npy`文件用于存储单个`numpy.ndarray`数组对象,它记录了数组对象的:
      + 数据类型
      + 维度信息
      + 列主序还是行主序
      + 数据本体
      以及
      + 文件魔数:前6个字节,目前的numpy版本为`.NUMPY`
      + numpy主版本和次版本:文件的第7和第8个字节被识别为8位无符号整型,分别表示文件格式的主版本和次版本号
      + 数据本体在文件中的位置:文件的第9和第10个字节被识别为小端无符号整型,其表示后续多少个字节位数据描述文本,其后才是数据本体
      下面通过一个文件示例查看,通过如下代码写出一个`npz`文件
      ```Python
      data = np.array([[1,2,3],[4,5,6]], dtype=float)
      np.save('data.npy', data)
      ```
      通过二进制程序查看,可以发现文件开头10个字节为
      ```shell
      # 前6个字符为:
      93 4e 55 4d 50 59
      # 其对应ascii码为 .NUMPY
      # 7~8位表示主次版本
      01 00
      # 9~10位为数组描述信息长度
      76 00
      ```
      从上述信息可知,从第11个字节开始的118个字节存储了数据描述信息,在本文件中如下

      可以看到这里是一个字典,记录了数据类型、是否列主序、数组维度信息。
      从第10+118个之后的字节就全都是数据本体了,如下

      可以看到文件结构比较简单,可以轻松的使用外部程序来解析此数据。


      IP属地:黑龙江4楼2024-09-05 21:04
      收起回复
        `npz`文件格式则是多个`npy`文件的集合,使用一些解压软件将其解压后即可得到独立的`npy`文件
        下面的截图是使用bandzip的解压界面,该文件的写出脚本为
        ```Python
        np.savez('data2.npz', data=data, pow=data**2)
        ```


        IP属地:黑龙江5楼2024-09-05 21:10
        回复