From e8f394527d574c9b25368e61486fab400a722600 Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Wed, 19 Jul 2017 19:42:10 +0800 Subject: Add utils/io.py with function "dataframe_to_csv()" Signed-off-by: Aaron LI --- fg21sim/utils/io.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 fg21sim/utils/io.py (limited to 'fg21sim') diff --git a/fg21sim/utils/io.py b/fg21sim/utils/io.py new file mode 100644 index 0000000..4d9999e --- /dev/null +++ b/fg21sim/utils/io.py @@ -0,0 +1,47 @@ +# Copyright (c) 2017 Weitian LI +# MIT license + +""" +Input/output utilities. +""" + +import os +import logging + +import pandas as pd + + +logger = logging.getLogger(__name__) + + +def dataframe_to_csv(df, outfile, clobber=False): + """ + Save the given Pandas DataFrame into a CSV text file. + + Parameters + ---------- + df : `~pandas.DataFrame` + The DataFrame to be saved to the CSV text file. + outfile : string + The path to the output CSV file. + clobber : bool, optional + Whether overwrite the existing output file? + Default: False + """ + if not isinstance(df, pd.DataFrame): + raise TypeError("Not a Pandas DataFrame!") + + # Create directory if necessary + dirname = os.path.dirname(outfile) + if not os.path.exists(dirname): + os.makedirs(dirname) + logger.info("Created output directory: {0}".format(dirname)) + + if os.path.exists(outfile): + if clobber: + logger.warning("Remove existing file: {0}".format(outfile)) + os.remove(outfile) + else: + raise OSError("Output file exists: {0}".format(outfile)) + df.to_csv(outfile, header=True, index=False) + logger.info("Saved DataFrame to CSV file: {0}".format(outfile)) -- cgit v1.2.2