code: def read_table(
      infile,
      header,
      *,
      sep="\t",
      fix=None,
      _open=open,
      _get_reader=csv.reader,
  ):
      """Yield each row of the given ???-separated (e.g. tab) file."""
      if isinstance(infile, str):
          with _open(infile, newline="") as infile:
              yield from read_table(
                  infile,
                  header,
                  sep=sep,
                  fix=fix,
                  _open=_open,
                  _get_reader=_get_reader,
              )
              return
      lines = strutil._iter_significant_lines(infile)
  
      # Validate the header.
      if not isinstance(header, str):
          header = sep.join(header)
      try:
          actualheader = next(lines).strip()
      except StopIteration:
          actualheader = ""
      if actualheader != header:
          raise ValueError(f"bad header {actualheader!r}")
  
      fix_row = _normalize_fix_read(fix)
      for row in _get_reader(lines, delimiter=sep or "\t"):
          yield tuple(fix_row(row))
  
imports: from collections import namedtuple
  import csv
  import re
  import textwrap
  from .None import NOT_SET, strutil, fsutil
label_desc: Use image node_id 7 for calling a global function with example usage: read_table(infile, header) without return types