-1

私は Python から sextractor を実行するコードを書きましたが、これを行う方法は 1 つのファイルに対してしか知らず、62 個のファイルをループする必要があります。どうすればこれを行うことができるかわかりません。私は以下のコードを添付しました:

#!/usr/bin/env python

# build a catalog using sextractor on des image here

sys.path.append('/home/fitsfiles')     #not sure if this does anything/is correct

def sex(image, output, sexdir='/home/sextractor-2.5.0', check_img=None,config=None, l=None) : 
  '''Construct a sextractor command and run it.'''
  #creates a sextractor line e.g sex img.fits -catalog_name -checkimage_name
  q="/home/fitsfiles/"+ "01" +".fits"
  com = [ "sex ", q, " -CATALOG_NAME " + output]
  s0=''
  com = s0.join(com)
  res = os.system(com)
  return res

img_name=sys.argv[0]
output=img_name[0:1]+'_star_catalog.fits'
t=sex(img_name,output)

print '----done !---'

したがって、このコードは私のメインターミナルで、sex /home/fitsfiles/01.fits -CATALOG_NAME g_star_catalog.fits のコマンドを生成します。

私が望むように星のカタログを正常に作成します。

ただし、コードを 62 個の適合ファイルに対してこれに変更し、使用されている適合ファイルに応じて star_catalog.fits の名前を変更したいと考えています。任意の助けをいただければ幸いです。

4

2 に答える 2

1

これにアプローチする方法はたくさんあります。スクリプトを次のように実行するとします。

python extract_stars.py /home/fitsfiles/*.fits

次に、次のようなことを試すことができます。

for arg in len(sys.argv):
    filename = arg.split('/')[-1].strip('.fits')
    t = sex(arg, filename +'_star_catalog.fits')
    # Whatever else

sexこれは、入力ファイル名を再フォーマットする行を削除することを前提としています。また、fits ディレクトリをパスに追加する必要はありません。

別のアプローチは、Python で他に何もする予定がない場合は、タスクを本当に単純化する bash スクリプトを作成することです。

また、補足として、この質問をもっと一般的に (つまり、私が書いた関数を多数の入力ファイルに適用したい)、あまり一般的ではないアプリケーションに言及せずに質問した場合、おそらくはるかに迅速に答えます。

于 2013-05-24T02:34:36.553 に答える