code: def main(args=None):
      
      if args is None:
          parser = create_parser()
          args = parser.parse_args()
  
      if args.debug:
          logging.basicConfig(level=logging.DEBUG)
      else:
          logging.basicConfig(level=logging.INFO)
  
      input_module = input_mapping[args.input_reader]
      output_module = output_mapping[args.output_format]
  
      templates = []
      # Load templates from external folder if set.
      if args.template_folder:
          templates += read_templates(os.path.abspath(args.template_folder))
  
      # Load internal templates, if not disabled.
      if not args.exclude_built_in_templates:
          templates += read_templates()
      output = []
      for f in args.input_files:
          res = extract_data(f.name, templates=templates, input_module=input_module)
          if res:
              logger.info(res)
              output.append(res)
              if args.copy:
                  filename = args.filename.format(
                      date=res['date'].strftime('%Y-%m-%d'),
                      invoice_number=res['invoice_number'],
                      desc=res['desc'],
                  )
                  shutil.copyfile(f.name, join(args.copy, filename))
              if args.move:
                  filename = args.filename.format(
                      date=res['date'].strftime('%Y-%m-%d'),
                      invoice_number=res['invoice_number'],
                      desc=res['desc'],
                  )
                  shutil.move(f.name, join(args.move, filename))
          f.close()
  
      if output_module is not None:
          output_module.write_to_file(output, args.output_name)
docs: Take folder or single file and analyze each.