docs: def __write_generic(self, header, d=None):
          """
          Write a generic section to the .txt. This function is reused for multiple sections.
          :param str header: Header title for this section
          :param int section_num:
          :param dict d: Section from steps_dict
          :return none:
          """
          logger_lpd_noaa.info("writing section: {}".format(header))
          if not d:
              d = self.noaa_data_sorted[header]
          d = self.__create_blanks(header, d)
          self.__write_header_name(header)
          for key in NOAA_KEYS_BY_SECTION[header]:
              key = self.__get_noaa_key_w_context(header, key)
              # NOAA writes value and units on one line. Build the string here.
              # if key == 'coreLength':
              #     value, unit = self.__get_corelength(val)
              #     val = str(value) + " " + str(unit)
              # DOI  id is nested in "identifier" block. Retrieve it.
              if key == "DOI":
                  val = self.__get_doi(d)
                  # Don't write out an empty DOI list. Write out empty string instead.
                  if not val:
                      val = ""
              elif key == "Investigators":
                  # Investigators is a section by itself. "d" should be a direct list
                  val = get_authors_as_str(d)
                  # If we don't have investigator data, use the authors from the first publication entry
                  if not val:
                      val = self.__create_author_investigator_str()
              # lipd uses a singular "author" key, while NOAA uses plural "authors" key.
              elif key in ["Author", "Authors"]:
                  # "d" has all publication data, so only pass through the d["Authors"] piece
                  val = get_authors_as_str(d[key])
              elif key == "Collection_Name":
                  if not d[key]:
                      # If there is not a collection name, then use the dsn so _something_ is there.
                      val = self.dsn
              else:
                  val = d[key]
  
              # Write the output line
              self.__write_k_v(str(self.__get_noaa_key(key)), val, indent=True)
          # Don't write a divider if there isn't a Chron section after species. It'll make a double.
          # if header == "Species" and not self.noaa_data_sorted["Species"]:
          #     return
          self.__write_divider()
          return