save csv
This commit is contained in:
parent
76e0a4e64a
commit
cbd3aa0c7c
@ -10,16 +10,17 @@ FLUSH_TYPE = "pickle-ndarray"
|
||||
METADATA_FILENAME = "_measurement_metadata.pkl"
|
||||
|
||||
class DataCollector:
|
||||
columns = ["idx", "t [s]", "V [V]", "LED [%]"]
|
||||
def __init__(self,
|
||||
data_path: str,
|
||||
data_name: str="CPData",
|
||||
header: dict[str, str]={},
|
||||
metadata: dict[str, str]={},
|
||||
dirname: str|None=None,
|
||||
dir_exists_is_ok=False,
|
||||
):
|
||||
self.data = []
|
||||
self.name = data_name
|
||||
self.header = header
|
||||
self.metadata = metadata
|
||||
self.path = os.path.abspath(os.path.expanduser(data_path))
|
||||
if dirname is None:
|
||||
self.dirname = sanitize_filename(datetime.datetime.now(datetime.UTC).strftime("%Y-%m-%d_%H-%M") + "_" + self.name)
|
||||
@ -33,14 +34,22 @@ class DataCollector:
|
||||
else:
|
||||
os.makedirs(self.dirpath)
|
||||
self.flushed = False
|
||||
|
||||
|
||||
def _get_filename(self):
|
||||
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)
|
||||
with open(filepath, "wb") as file:
|
||||
pickle.dump(self.header, file)
|
||||
pickle.dump(self.metadata, file)
|
||||
|
||||
def flush(self, verbose:bool=False):
|
||||
"""
|
||||
@ -66,7 +75,7 @@ class DataCollector:
|
||||
filename = self._get_filename() + ".csv"
|
||||
filepath = os.path.join(self.dirpath, filename)
|
||||
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":
|
||||
filename = self._get_filename() + ".ndarray.pkl"
|
||||
filepath = os.path.join(self.dirpath, filename)
|
||||
@ -85,15 +94,34 @@ class DataCollector:
|
||||
self.data.append((i, t, v, l))
|
||||
|
||||
def to_dataframe(self):
|
||||
df = pd.DataFrame(self.data, columns=["idx", "t [s]", "V [V]", "LED [%]"])
|
||||
df.meta = str(self.header)
|
||||
df = pd.DataFrame(self.data, columns=DataCollector.columns)
|
||||
df.meta = str(self.metadata)
|
||||
return df
|
||||
|
||||
def save_csv(self):
|
||||
self.to_dataframe().to_csv(os.path.join(self.path, self.name + ".csv"), index=False, header=True)
|
||||
def to_csv(self, sep=","):
|
||||
# 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):
|
||||
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
|
||||
def load_data(dirpath:str, verbose:bool=False) -> np.ndarray:
|
||||
"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user