0

现在,我的 Python 3 脚本从 NASA 的 GES DISC(数千个)下载 50MB .hdf 文件,将它们写入磁盘,将它们读回,然后选择并保存文件中大约 2% 的数据。显然,如果它只保存 2% 的数据并且从不将整个文件写入磁盘,它将最大限度地减少磁盘读写。

注意:requests除非您有免费的Earthdata用户名/密码,否则此示例将不起作用

import requests
url = 'https://airsl1.gesdisc.eosdis.nasa.gov/data/Aqua_AIRS_Level1/AIRIBRAD.005/2021/001/AIRS.2021.01.01.001.L1B.AIRS_Rad.v5.0.25.0.G21001215039.hdf'
with requests.Session() as session:
        session.auth = (username, password)
        r1 = session.request('get', url)
        r = session.get(r1.url, auth=(username, password))

现在 .hdf 文件在内存中,典型的下一步是写入磁盘:

result.raise_for_status()
f = open('C:\\data\\file.hdf','wb')
f.write(r.content)
f.close()

然后再读一遍:

from pyhdf.SD import *
f = SD('C:\\data\\file.hdf', SDC.READ)
data_i_want = f.select('Latitude') # etc...

跳过磁盘写入/读取并执行以下操作将是理想的:

import requests
from pyhdf.SD import *

url = 'https://airsl1.gesdisc.eosdis.nasa.gov/data/Aqua_AIRS_Level1/AIRIBRAD.005/2021/001/AIRS.2021.01.01.001.L1B.AIRS_Rad.v5.0.25.0.G21001215039.hdf'
with requests.Session() as session:
        session.auth = (username, password)
        r1 = session.request('get', url)
        r = session.get(r1.url, auth=(username, password))
f = SD(r.content, SDC.READ)
data_i_want = f.select('Latitude') # etc...

但这会引发错误:HDF4Error: SD: no such file
有没有办法在不接触磁盘的情况下将 r.content 传递给 PyHDF?

4

0 回答 0