docs: def lipd_read(path):
      """
      Loads a LiPD file from local path. Unzip, read, and process data
      Steps: create tmp, unzip lipd, read files into memory, manipulate data, move to original dir, delete tmp.
  
      :param str path: Source path
      :return none:
      """
      _j = {}
      dir_original = os.getcwd()
  
      # Import metadata into object
      try:
          print("reading: {}".format(print_filename(path)))
          # bigger than 2mb file? This could take a while
          if os.stat(path).st_size > 1000000:
              _size = os.stat(path).st_size
              print("{} :That's a big file! This may take a while to load...".format("{} MB".format(round(_size/1000000,2))))
          dir_tmp = create_tmp_dir()
          unzipper(path, dir_tmp)
          os.chdir(dir_tmp)
          _dir_data = find_files()
          os.chdir(_dir_data)
          _j = read_jsonld()
          _j = rm_empty_fields(_j)
          _j = check_dsn(path, _j)
          _j = update_lipd_version(_j)
          _j = idx_num_to_name(_j)
          _j = rm_empty_doi(_j)
          _j = rm_empty_fields(_j)
          _j = put_tsids(_j)
          _csvs = read_csvs()
          _j = merge_csv_metadata(_j, _csvs)
          # Why ? Because we need to align the csv filenames with the table filenames. We don't need the csv output here.
          _j, _csv = get_csv_from_metadata(_j["dataSetName"], _j)
          os.chdir(dir_original)
          shutil.rmtree(dir_tmp)
      except FileNotFoundError:
          print("Error: lipd_read: LiPD file not found. Please make sure the filename includes the .lpd extension")
      except Exception as e:
          logger_lipd.error("lipd_read: {}".format(e))
          print("Error: lipd_read: unable to read LiPD: {}".format(e))
      os.chdir(dir_original)
      logger_lipd.info("lipd_read: record loaded: {}".format(path))
      return _j