2013-07-18 4 views
1

큰 코드를 작성하는 데는 너무 가깝지만 마지막 부분은 실패한 것 같습니다. 그 이유는 모르겠습니다. 제가 여기서하려고하는 것은 이미지 배열을 다른 이미지 배열과 비교하는 것입니다. 그리고 초기 이미지 배열이 1이면, 두 번째 이미지 배열에서 그 부분을 마스크하고 싶습니다.PyFITS : 파일이 이미 존재합니다.

코드 :

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. 
+0

이미 존재하는 파일 (작성된 파일)에 쓰고 있는데,'os.remove (경로)'를 앞에두고 해결되었는지 확인하십시오. (여기서'path = 'newestmask'+ str (inimgs) [5:16] + '.fits'') –

답변

2

기존 파일을 덮어 걱정하지 않는 경우, pyfits.writeto가에 clobber 인수를 받아들이는 그러나, 나는 이상한 오류를 받고 있어요 기존 파일을 자동으로 덮어 씁니다 (경고를 출력 함).

제쳐두고, 위에 게시 한 코드가 이 아니고 Numpy를 사용하는 올바른 방법이임을 강조합니다. 코드의 루프는 한 줄로 작성 될 수 있으며 훨씬 빠르게 처리됩니다. 예를 들어, 많은 가능성 중 하나는 다음과 같이 그것을 작성하는 것입니다 :

oimg[newmaskimg == 1] = 0 
0

예, clobber = True를 추가합니다. 전에이 코드를 사용했는데 정상적으로 작동합니다. 또는 간단히 가서 sudo rm path/to/file을 제거하고 다시 실행하면됩니다.

관련 문제