<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def read_tabular(filename, dtype_conversion=None):
 """ Read a tabular data file which can be CSV, TSV, XLS or XLSX. Parameters filename : str or pathlib.Path The full file path. May be a compressed file. dtype_conversion : dict Column names as keys and corresponding type for loading the data. Please take a look at the `pandas documentation <https://pandas.pydata.org/pandas-docs/stable/io.html#specifying-column-data-types>`__ for detailed explanations. Returns ------- pandas.DataFrame The data table. """

    if dtype_conversion is None:
        dtype_conversion = {}
    name, ext = filename.split(".", 1)
    ext = ext.lower()
    # Completely empty columns are interpreted as float by default.
    dtype_conversion["comment"] = str
    if "csv" in ext:
        df = pd.read_csv(filename, dtype=dtype_conversion, encoding="utf-8")
    elif "tsv" in ext:
        df = pd.read_table(filename, dtype=dtype_conversion, encoding="utf-8")
    elif "xls" in ext or "xlsx" in ext:
        df = pd.read_excel(filename, dtype=dtype_conversion, encoding="utf-8")
    # TODO: Add a function to parse ODS data into a pandas data frame.
    else:
        raise ValueError("Unknown file format '{}'.".format(ext))
    return df