【问题标题】:How can I partially read 2d satellite file in Python? (binary, fromfile)如何在 Python 中部分读取 2d 卫星文件? (二进制,源文件)
【发布时间】:2017-03-02 10:14:20
【问题描述】:

我有很多由二维组成的卫星数据。

(我将 H5 转换为不包含纬度信息的二维数组数据 我另外制作了纬度/经度信息数据。)

我知道真正的纬度/经度坐标和网格坐标在一个数据中。

如何在 Python 中部分读取二维卫星文件?

"numpy.fromfile" 通常用于读取二进制文件。

如果我在 numpy.fromfile 中使用选项作为计数,我可以部分读取二进制文件。

但是我想跳过一个数据中的前记录以节省内存

例如,我有 3x3 2d 数据如下:

蟒蛇

a= [[1,2,3] [4,5,6] [7,8,9]]

我刚刚在 Python 中阅读了 a[3][0]。 (结果 = 7)

当我在 Fortran 中读取文件时,我使用了“recl,rec”。

Fortran

打开(1,文件='exsmaple.bin',访问='直接',recl=4)! recl=4 表示 4 btype

读取(1, rec=lat*x-lon) 文件名

关闭(1)

lat 表示数据中纬度的位置。 (以上示例中的 lat = 3 ;在 Fortran 中起始编号为 1。)

lon 表示数据中的经度位置。 (上面示例中的 lon = 1 ;Fortran 中的起始编号为 1。)

x 不是。行。 (x = 3,上例,数组为3x3)

我可以读取文件,并且只使用 4 字节的内存。

我想知道Python中类似的方法。

请给我一些特殊信息以节省时间和记忆。

感谢您阅读我的问题。

2016.10.28。 解决方案

蟒蛇 数据 = [1,2,3,4,5,6,7,8,9], dtype = int8, filename=name

a = np.memmap(name, dtype='int8', mode='r', shape=(1), offset=6)

打印一个[0]

结果:7

【问题讨论】:

  • 它是哪种类型的文件? .h5 ? .nc ? .xml ?
  • 首先是H5数据。我将 H5 转换为二维数组数据(float32)。
  • 感谢您阅读我的问题和友好的回答。

标签: python arrays numpy binary fromfile


【解决方案1】:

读取 .h5 文件:

import h5py
ds = h5py.File(filename, "r")
variable = ds['variable_name']

【讨论】:

    【解决方案2】:

    很难理解您的描述。一些适当的代码缩进将有助于解决您的英语语言问题。

    所以你有一个 H5 文件的数据。最简单的方法是 h5py 将其加载到 Python/numpy 会话中,并从这些数组中选择必要的数据。

    但听起来好像您已将此数据的一部分写入“普通”二进制文件。了解您是如何做到的可能会有所帮助。还有这个2d是什么方式?

    np.fromfile 像读取 1d 文件一样读取文件。你能阅读这个文件吗,最多一些count?并使用正确的dtype

    np.fromfile 接受打开的文件。所以我认为你可以打开文件,使用seek 向前跳过,然后从那里读取count 项目。但我还没有测试过这个想法。

    【讨论】:

    • 感谢您的回答!我找到了解决方案。我可以使用“memmap”从数组中提取值。