code: def select(self, criterion, keepboth=False):
          
          if keepboth:
              fcs_yes, fcs_no = FileCollection(), FileCollection()
              for winfile in self.files.values():
                  if criterion(winfile):
                      fcs_yes.files[winfile.abspath] = winfile
                  else:
                      fcs_no.files[winfile.abspath] = winfile
              return fcs_yes, fcs_no
          else:
              fcs = FileCollection()
              for winfile in self.files.values():
                  if criterion(winfile):
                      fcs.files[winfile.abspath] = winfile
              
              return fcs
docs: Filter current file collections, create another file collections 
          contains all winfile with criterion=True.
          
          How to construct your own criterion function, see 
          :meth:`FileCollection.from_path_by_criterion`.
  
          :param criterion: customize filter function
          :type criterion: function
          :param keepboth: if True, returns two file collections, one is files
              with criterion=True, another is False.
          :type keepboth: boolean
          
          **中文文档**
          
          在当前的文件集合中, 根据criterion中的规则, 选择需要的生成
          FileCollection。当keepboth参数=True时, 返回两个FileCollection, 一个
          是符合条件的文件集合, 一个是不符合条件的。