【问题标题】:Check if all files are there in directory before proceeding to execute the remaining code?在继续执行剩余代码之前检查目录中是否所有文件都存在?
【发布时间】:2019-01-19 16:02:12
【问题描述】:

在代码继续开始计算之前,我正在尝试确保所有文件(在我的情况下为“ccf_table”、“bis_file”)都存在于目录中。如果其中任何一个(bis_file,ccf_table)不在任何输入文件的目录中(在我的情况下为“文件名”),那么只需传递该输入文件。

path = "/home/Desktop/s1d_data"
for filename in os.listdir(path):
  if filename.endswith("_s1d_A.fits"):
  s1d_hdu = fits.open(filename)
  s1d_header = s1d_hdu[0].header
  date = s1d_header['DATE-OBS']
  date2 = date = date[0:19]
  ccf_table = glob('HARPS.' + date2 + '*_ccf_G2_A.tbl')
  bis_file = glob('HARPS.' + date2 + '*_bis_G2_A.fits')

  filelist = ['ccf_table','bis_file']
  while True:
    list1 = []
    for file in filelist:
      list1.append(os.path.isfile(file))

      if all(list1):
         break
      else:
         pass

  df=pd.read_table(ccf_table[0],skiprows=2,usecols=(0,4),names=['order','rv'],)
  df = df.rv.mean()
  out_name = s1d_header['OBJECT'] +'-' + s1d_header['DATE-OBS'] +'.fits'

这是我到目前为止所尝试的,但没有得到想要的结果。任何帮助将不胜感激。

【问题讨论】:

  • 您是否使用os.path.isfile 结账? stackoverflow.com/questions/2259382/…
  • 不,我没有我们如何执行它?
  • 您似乎正在尝试创建工作流。如果您使用更多此类规则,我建议您查看诸如snakemake或luigi之类的工作流框架
  • 这基本上不是您上一个问题或之前那个问题的重复吗? stackoverflow.com/questions/51749269/… 似乎您仍在为正确获取相同代码的文件处理逻辑而苦苦挣扎。也许有当地人可以提供帮助?或者,如果您想将此移至聊天室,我可以帮助您编写代码。
  • 另外,在发布 Python 代码时,请确保缩进与您所拥有的完全相同(您可以将代码直接复制并粘贴到 SO 编辑器中,用鼠标选择它,然后按 Ctrl- K 同时缩进)

标签: python fits


【解决方案1】:

嗯,感谢大家的帮助,但我设法通过使用另一种方法自己解决了这个问题。所以我认为最好分享一下我是如何解决的。

for filename in os.listdir("/home/Desktop/2d_spectra"):
   if filename.endswith("_e2ds_A.fits"):
     e2ds_hdu = fits.open(filename,ignore_missing_end=True)
     e2ds_header = e2ds_hdu[0].header
     blaze_file = e2ds_header['HIERARCH ESO DRS BLAZE FILE']
     date = e2ds_header['DATE-OBS']
     date2 = date = date[0:19]
     blaze_file1 = glob(blaze_file)
     bis_file = glob('HARPS.' + date2 + '*_bis_G2_A.fits')
     ccf_table = glob('HARPS.' + date2 + '*_ccf_G2_A.tbl')

     ll = np.size([blaze_file1]) + np.size(bis_file) + np.size(ccf_table)   #[] will convert the string to numpy array
        if ll == 3:      
        #did what i wanted to do.

        else:
           none

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2014-01-07
    • 1970-01-01
    • 2018-06-21
    • 2012-07-02
    相关资源
    最近更新 更多