save csv
This commit is contained in:
parent
76e0a4e64a
commit
cbd3aa0c7c
@ -10,16 +10,17 @@ FLUSH_TYPE = "pickle-ndarray"
|
|||||||
METADATA_FILENAME = "_measurement_metadata.pkl"
|
METADATA_FILENAME = "_measurement_metadata.pkl"
|
||||||
|
|
||||||
class DataCollector:
|
class DataCollector:
|
||||||
|
columns = ["idx", "t [s]", "V [V]", "LED [%]"]
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
data_path: str,
|
data_path: str,
|
||||||
data_name: str="CPData",
|
data_name: str="CPData",
|
||||||
header: dict[str, str]={},
|
metadata: dict[str, str]={},
|
||||||
dirname: str|None=None,
|
dirname: str|None=None,
|
||||||
dir_exists_is_ok=False,
|
dir_exists_is_ok=False,
|
||||||
):
|
):
|
||||||
self.data = []
|
self.data = []
|
||||||
self.name = data_name
|
self.name = data_name
|
||||||
self.header = header
|
self.metadata = metadata
|
||||||
self.path = os.path.abspath(os.path.expanduser(data_path))
|
self.path = os.path.abspath(os.path.expanduser(data_path))
|
||||||
if dirname is None:
|
if dirname is None:
|
||||||
self.dirname = sanitize_filename(datetime.datetime.now(datetime.UTC).strftime("%Y-%m-%d_%H-%M") + "_" + self.name)
|
self.dirname = sanitize_filename(datetime.datetime.now(datetime.UTC).strftime("%Y-%m-%d_%H-%M") + "_" + self.name)
|
||||||
@ -34,13 +35,21 @@ class DataCollector:
|
|||||||
os.makedirs(self.dirpath)
|
os.makedirs(self.dirpath)
|
||||||
self.flushed = False
|
self.flushed = False
|
||||||
|
|
||||||
|
|
||||||
def _get_filename(self):
|
def _get_filename(self):
|
||||||
return sanitize_filename(get_next_filename(self.name, self.dirpath, digits=5))
|
return sanitize_filename(get_next_filename(self.name, self.dirpath, digits=5))
|
||||||
|
|
||||||
def _write_metadata(self):
|
def write_metadata(self):
|
||||||
|
f"""
|
||||||
|
Write the metadata to the disk as '{METADATA_FILENAME}'
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
None.
|
||||||
|
"""
|
||||||
filepath = os.path.join(self.dirpath, METADATA_FILENAME)
|
filepath = os.path.join(self.dirpath, METADATA_FILENAME)
|
||||||
with open(filepath, "wb") as file:
|
with open(filepath, "wb") as file:
|
||||||
pickle.dump(self.header, file)
|
pickle.dump(self.metadata, file)
|
||||||
|
|
||||||
def flush(self, verbose:bool=False):
|
def flush(self, verbose:bool=False):
|
||||||
"""
|
"""
|
||||||
@ -66,7 +75,7 @@ class DataCollector:
|
|||||||
filename = self._get_filename() + ".csv"
|
filename = self._get_filename() + ".csv"
|
||||||
filepath = os.path.join(self.dirpath, filename)
|
filepath = os.path.join(self.dirpath, filename)
|
||||||
if verbose: print(f"Flushing data to {filepath}")
|
if verbose: print(f"Flushing data to {filepath}")
|
||||||
self.to_dataframe().to_csv(filepath, sep=",", index=False, header=True)
|
self.to_dataframe().to_csv(filepath, sep=",", index=False, metadata=True)
|
||||||
elif FLUSH_TYPE == "pickle-ndarray":
|
elif FLUSH_TYPE == "pickle-ndarray":
|
||||||
filename = self._get_filename() + ".ndarray.pkl"
|
filename = self._get_filename() + ".ndarray.pkl"
|
||||||
filepath = os.path.join(self.dirpath, filename)
|
filepath = os.path.join(self.dirpath, filename)
|
||||||
@ -85,15 +94,34 @@ class DataCollector:
|
|||||||
self.data.append((i, t, v, l))
|
self.data.append((i, t, v, l))
|
||||||
|
|
||||||
def to_dataframe(self):
|
def to_dataframe(self):
|
||||||
df = pd.DataFrame(self.data, columns=["idx", "t [s]", "V [V]", "LED [%]"])
|
df = pd.DataFrame(self.data, columns=DataCollector.columns)
|
||||||
df.meta = str(self.header)
|
df.meta = str(self.metadata)
|
||||||
return df
|
return df
|
||||||
|
|
||||||
def save_csv(self):
|
def to_csv(self, sep=","):
|
||||||
self.to_dataframe().to_csv(os.path.join(self.path, self.name + ".csv"), index=False, header=True)
|
# self.to_dataframe().to_csv(os.path.join(self.path, self.name + ".csv"), index=False, metadata=True)
|
||||||
|
data, metadata = self.get_data()
|
||||||
|
return DataCollector.get_csv(data, self.metadata, sep=sep)
|
||||||
|
|
||||||
|
def save_csv(self, sep=",", verbose=False):
|
||||||
|
filepath = os.path.join(self.path, self.name + ".csv")
|
||||||
|
if verbose: print(f"Writing data to {filepath}")
|
||||||
|
with open(filepath, "w") as file:
|
||||||
|
file.write(self.to_csv(sep=sep))
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return DataCollector.load_data(self.dirpath)
|
return DataCollector.load_data(self.dirpath)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_csv(data, metadata, sep=","):
|
||||||
|
csv = ""
|
||||||
|
for k, v in metadata.items():
|
||||||
|
csv += f"# {k}: {v}\n"
|
||||||
|
csv += "".join(f"{colname}{sep}" for colname in DataCollector.columns).strip(sep) + "\n"
|
||||||
|
for i in range(data.shape[0]):
|
||||||
|
csv += f"{i}{sep}{data[i,1]}{sep}{data[i,2]}{sep}{data[i,3]}\n"
|
||||||
|
return csv.strip("\n")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def load_data(dirpath:str, verbose:bool=False) -> np.ndarray:
|
def load_data(dirpath:str, verbose:bool=False) -> np.ndarray:
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user