0

現在、私の Python 3 スクリプトは、NASA の GES DISC から 50MB の .hdf ファイル (数千個) をダウンロードし、それらをディスクに書き込み、再度読み取り、ファイル内のデータの約 2% を選択して保存します。明らかに、データの 2% のみを保存し、ファイル全体をディスクに書き込まなければ、ディスクの読み書きが最小限に抑えられます。

注: この例は、無料のEarthdataユーザー名/パスワードrequestsを持っていないと機能しません

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