docs: def read_csv_from_file(filename):
      """
      Opens the target CSV file and creates a dictionary with one list for each CSV column.
  
      :param str filename:
      :return list of lists: column values
      """
      logger_csvs.info("enter read_csv_from_file")
      d = {}
      l = []
      try:
          logger_csvs.info("open file: {}".format(filename))
          with open(filename, 'r') as f:
              r = csv.reader(f, delimiter=',')
  
              # Create a dict with X lists corresponding to X columns
              for idx, col in enumerate(next(r)):
                  d[idx] = []
                  d = cast_values_csvs(d, idx, col)
  
              # Start iter through CSV data
              for row in r:
                  for idx, col in enumerate(row):
                      # Append the cell to the correct column list
                      d = cast_values_csvs(d, idx, col)
  
          # Make a list of lists out of the dictionary instead
          for idx, col in d.items():
              l.append(col)
      except FileNotFoundError as e:
          print('CSV FileNotFound: ' + filename)
          logger_csvs.warn("read_csv_to_columns: FileNotFound: {}, {}".format(filename, e))
      logger_csvs.info("exit read_csv_from_file")
      return l