associate DataFrameHolder to file

This commit is contained in:
2022-05-27 19:40:04 +02:00
parent 4dd9ba3c9e
commit 6a5a77f670
3 changed files with 34 additions and 7 deletions

View File

@ -47,9 +47,7 @@ if not new_df.equals(df) and not changed:
restapi.data = df = new_df restapi.data = df = new_df
if not df.empty: restapi.dfh.dump()
print("<<< write hdf")
df.to_hdf("output.h5", key="data")
print(">>> end of streamlit run") print(">>> end of streamlit run")

View File

@ -8,7 +8,7 @@ from utils.st_utils import rerun
class TableAPI: class TableAPI:
def __init__(self): def __init__(self):
self.dfh = DateFrameHolder() self.dfh = DateFrameHolder("output.h5")
self.sid = None self.sid = None
self.changed = True self.changed = True

View File

@ -3,9 +3,13 @@ import pandas as pd
class DateFrameHolder: class DateFrameHolder:
def __init__(self, df=None): def __init__(self, fn):
self.df = df or pd.DataFrame() self.fn = fn
# self.df = pd.DataFrame.from_records([dict(a=1, b=2, c=3)] * 4) #TODO: remove self.df = try_load_df(fn)
def dump(self):
dump_non_empty_df(self.df, self.fn)
def append(self, data): def append(self, data):
data = pd.DataFrame.from_records([data]) data = pd.DataFrame.from_records([data])
@ -15,6 +19,31 @@ class DateFrameHolder:
self.df = pd.DataFrame() self.df = pd.DataFrame()
def __repr__(self):
head = self.fn + ":"
line = "-" * len(head)
df = str(self.df)
return "\n".join((head, line, df))
def try_load_df(fn):
try:
df = pd.read_hdf(fn)
print(f">>> loaded dataframe from {fn}")
except FileNotFoundError:
df = pd.DataFrame()
print(">>> created empty dataframe")
return df
def dump_non_empty_df(df, fn, key="data"):
if df.empty:
print("<<< skip dumping empty dataframe")
return
print(f"<<< dump dataframe to {fn}")
df.to_hdf(fn, key)
from io import BytesIO from io import BytesIO