1

我真的很接近完成一个大代码,但它的最后一部分似乎失败了,我不知道为什么。我在这里尝试做的是获取一个图像阵列,将其与不同的图像阵列进行比较,并且无论初始图像阵列等于 1,我想在第二个图像阵列中屏蔽该部分。但是,我遇到了一个奇怪的错误:

代码:

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 的正确方法。代码中的循环可以写在一行中,并且速度会快几个数量级。例如,许多可能性之一是这样写:

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

Yes, add clobber = True. I've used this in my codes before and it works just fine. Or, simply go and sudo rm path/to/file and get rid of them so you can run it again.

于 2014-08-16T18:42:06.790 回答
0

我遇到了同样的问题,事实证明使用该参数clobber仍然有效,但未来版本的 AstroPy 将不再支持。

该参数overwrite做同样的事情并且不会发出错误消息。

于 2020-02-21T12:36:49.677 回答