现在,我的 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?