1

大規模なコードの完成に近づいていますが、その最後のセグメントが失敗しているようで、その理由がわかりません。ここでやろうとしているのは、画像配列を取得して、それを別の画像配列と比較することです。最初の画像配列が 1 に等しい場合は、2 番目の画像配列でその部分をマスクします。ただし、奇妙なエラーが発生します。

コード:

maskimg='omask'+str(inimgs)[5:16]+'.fits'
newmaskimg=pf.getdata(maskimg)
oimg=pf.getdata(inimgs)
for i in range (newmaskimg.shape[0]):
    for j in range (newmaskimg.shape[1]):
        if newmaskimg[i,j]==1:
            oimg[i,j]=0
pf.writeto('newestmask'+str(inimgs)[5:16]+'.fits',newmaskimg)

エラー:

/home/vidur/se_files/fetch_swarp10.py in objmask(inimgs, inwhts, thresh1, thresh2, tfdel, xceng, yceng, outdir, tmpdir)
    122             if newmaskimg[i,j]==1:
    123                 oimg[i,j]=0
--> 124     pf.writeto('newestmask'+str(inimgs)[5:16]+'.fits',newmaskimg)
    125 
    126 

/usr/local/lib/python2.7/dist-packages/pyfits/convenience.pyc in writeto(filename, data, header, output_verify, clobber, checksum)
    396         hdu = PrimaryHDU(data, header=header)
    397     hdu.writeto(filename, clobber=clobber, output_verify=output_verify,
--> 398                 checksum=checksum)
    399 
    400 

/usr/local/lib/python2.7/dist-packages/pyfits/hdu/base.pyc in writeto(self, name, output_verify, clobber, checksum)
    348         hdulist = HDUList([self])
    349         hdulist.writeto(name, output_verify, clobber=clobber,
--> 350                         checksum=checksum)
    351 
    352     def _get_raw_data(self, shape, code, offset):

/usr/local/lib/python2.7/dist-packages/pyfits/hdu/hdulist.pyc in writeto(self, fileobj, output_verify, clobber, checksum)
    651                     os.remove(filename)
    652                 else:
--> 653                     raise IOError("File '%s' already exists." % filename)
    654         elif (hasattr(fileobj, 'len') and fileobj.len > 0):
    655             if clobber:

IOError: File 'newestmaskPHOTOf105w0.fits' already exists.
4

3 に答える 3

2

既存のファイルを上書きしても構わない場合は、既存のファイルを自動的に上書きする引数をpyfits.writeto受け入れclobberます (それでも警告が出力されます)。

pyfits.writeto(..., clobber=True)

余談ですが、あなたが上に投稿したコードは、Numpy を使用する正しい方法ではないことを強調しておきます。コード内のループは 1 行で記述でき、桁違いに高速になります。たとえば、多くの可能性のうちの 1 つは、次のように記述することです。

oimg[newmaskimg == 1] = 0
于 2013-08-14T18:37:31.190 に答える
0

はい、追加しclobber = Trueます。以前にコードでこれを使用したことがありますが、問題なく動作します。または、単純sudo rm path/to/fileにそれらを削除して、もう一度実行できるようにします。

于 2014-08-16T18:42:06.790 に答える