[docs]defproject_to_csv(project,filename=''):r""" Save all the pore and throat data on the Network and Phase objects to a CSV file Parameters ---------- project : list An openpnm ``project`` object filename : str or path object The name of the file to store the data """df=project_to_pandas(project=project,join=True,delim='.')iffilename=='':filename=project.namefname=_parse_filename(filename=filename,ext='csv')df.to_csv(fname,index=False)
[docs]defnetwork_to_csv(network,filename=''):"""Exports a network to a CSV file."""proj=Project()proj.append(network)df=network_to_pandas(network=network,join=True,delim='.')iffilename=='':filename=network.namefname=_parse_filename(filename=filename,ext='csv')df.to_csv(fname,index=False)
[docs]defnetwork_from_csv(filename):"""Loads a network from a CSV file."""fromopenpnm.networkimportNetworkfname=_parse_filename(filename=filename,ext='csv')a=read_table(filepath_or_buffer=fname,sep=',',skipinitialspace=True,index_col=False,true_values=['T','t','True','true','TRUE'],false_values=['F','f','False','false','FALSE'])# First parse through all the items and re-merge columnsdct={}keys=sorted(list(a.keys()))foriteminkeys:m=re.search(r'\[.\]',item)# The dot '.' is a wildcardifm:# m is None if pattern not found, otherwise merge colspname=re.split(r'\[.\]',item)[0]# Get base propname# Find all other keys with same base propnamemerge_keys=[kforkina.keys()ifk.startswith(pname)]# Rerieve and remove arrays with same base propnamemerge_cols=[a.pop(k)forkinmerge_keys]# Merge arrays into multi-column array and store in DataFramedct[pname]=np.vstack(merge_cols).T# Remove key from list of keysforkinkeys:ifk.startswith(pname):keys.pop(keys.index(k))else:dct[item]=np.array(a.pop(item))# Now scan through 'pore.coords' and 'throat.conns' to get Np and Nt,# then remove the nanstry:Np=np.where(np.isnan(dct['pore.coords'][:,0]))[0][0]exceptIndexError:Np=dct['pore.coords'][:,0].shape[0]try:Nt=np.where(np.isnan(dct['throat.conns'][:,0]))[0][0]exceptIndexError:Nt=dct['throat.conns'][:,0].shape[0]fork,vindct.items():ifk.startswith('pore.'):dct[k]=v[:Np,...]ifk.startswith('throat.'):dct[k]=v[:Nt,...]network=Network()network.update(dct)returnnetwork