docs: def gen_rows_from_csv_binfiles(
          csv_files: Iterable[BinaryIO],
          encoding: str = UTF8,
          skip_header: bool = False,
          **csv_reader_kwargs) -> Generator[Iterable[str], None, None]:
      """
      Iterate through binary file-like objects that are CSV files in a specified
      encoding. Yield each row.
  
      Args:
          csv_files: iterable of :class:`BinaryIO` objects
          encoding: encoding to use
          skip_header: skip the header (first) row of each file?
          csv_reader_kwargs: arguments to pass to :func:`csv.reader`
  
      Yields:
          rows from the files
  
      """
      dialect = csv_reader_kwargs.pop('dialect', None)
      for csv_file_bin in csv_files:
          # noinspection PyTypeChecker
          csv_file = io.TextIOWrapper(csv_file_bin, encoding=encoding)
          thisfile_dialect = dialect
          if thisfile_dialect is None:
              thisfile_dialect = csv.Sniffer().sniff(csv_file.read(1024))
              csv_file.seek(0)
          reader = csv.reader(csv_file, dialect=thisfile_dialect,
                              **csv_reader_kwargs)
          first = True
          for row in reader:
              if first:
                  first = False
                  if skip_header:
                      continue
              yield row