2017-01-02 2 views
-1

どのように多くのファイルを抽出するために、(100個のファイルのようなtheresの)より多くのファイル(100個のファイルのようなもの)を抽出する方法は?

pw_201701010000.nc 
pw_201701010100.nc 
pw_201701010200.nc 
pw_201701010300.nc 
... 
pw_201701022300.nc 

コード:あなたはすべての.ncファイルを取得するglobを使用する場合

from numpy import * 
from netCDF4 import Dataset 

fname = 'pw_201701010000' 

f = Dataset(fname+'.nc') 
print (f.variables) 
data = f.variables['pw'][0][:] 
data = data-0. 
time = f.variables['time'][:] 
lat = f.variables['latitude'][:] 
lon = f.variables['longitude'][:] 
f.close() 


f = open(fname+'.txt','w') 
for i in range(len(lat)): 
    for j in range(len(lon)): 
     if lat[i]>=-3.0 and lat[i]<=0 and lon[j]>=116.0 and lon[j]<=119.0: 
      #f.write(('%f\t%f\t%f\n')%(lat[i],lon[j],data[i,j])) 
      f.write(('%f\t')%(data[i,j])) 
    if lat[i]>=-3.0 and lat[i]<=0: 
     f.write('\n') 
f.close() 

答えて

1

それを行うことは非常に簡単です:

import glob 
from numpy import * 
from netCDF4 import Dataset 

for fname in glob.iglob("*.nc"): 

    f = Dataset(fname) 
    print(f.variables) 
    data = f.variables['pw'][0][:] 
    data = data-0. 
    time = f.variables['time'][:] 
    lat = f.variables['latitude'][:] 
    lon = f.variables['longitude'][:] 
    f.close() 

    with open(fname.rsplit('.',1)[0]+'.txt','w') as f: 
     for i in range(len(lat)): 
      for j in range(len(lon)): 
       if lat[i]>=-3.0 and lat[i]<=0 and lon[j]>=116.0 and lon[j]<=119.0: 
        #f.write(('%f\t%f\t%f\n')%(lat[i],lon[j],data[i,j])) 
        f.write(('%f\t')%(data[i,j])) 
      if lat[i]>=-3.0 and lat[i]<=0: 
       f.write('\n') 
+0

+1ですが、私はglobを使用しません。 100 * .ncファイルがある場合、そこには他のファイルの数があります。 dirが大きければ、listdir()(globモジュール)のgenerator版をos.listdir()を使用して作成し、os.path.isfile(fname)とfname.endswith( "。nc")をチェックすることをお勧めします。その後、抽出を開始する前にglob.glob()が終了するのを待つ必要はありません。 – Dalen

+0

@Dalen:チップをありがとう。私は – inspectorG4dget

+0

を少し更新しました。しかし、iglob()はos.listdir()も使用します。これは、ディレクトリからすべてのファイルを取得するまでブロックできます。それらの多くがある場合、遅延はかなり大きいことができます。私は、iglob()のような関数を書くべきですが、リストを返さずにジェネレータオブジェクトを代わりに返す他のlistdir()を使用することを意味しました。したがって、os.listdir()を待つことなく、返されたリストをもう一度繰り返しますが、ファイルごとにディレクトリファイルを調べるときにファイルをチェックします。 – Dalen

関連する問題