Source code for diaGrabber.source.plainText
# -*- coding: utf-8 *-*
from copy import deepcopy
import linecache, sys
from diaGrabber import _utils
from . import _dimension
from _source import _source
[docs]class plainText(_source):
def __init__(self, folder, file_name, dim_seperator, data_type = "unknown"):
super(plainText,self).__init__(data_type)
self.folder = folder
self.file_name = file_name
self.dat_file = self.folder + self.file_name
self.dim_seperator = dim_seperator
self.readout_every_n_line = 1
self.dimension = _dimension.dimension
try:
self.len_dat_file = len(file(self.dat_file, "r").readlines())
except IOError:#found no readable file called self._output_file
print "ERROR: does your output_file exist?"
sys.exit()
def _prepareReadOut(self, matrixClass):
#matrixClass.nDim
self._prepareStandard(matrixClass)
self.n = 0
self.sum_bar = 100
self.showBar_counter = self.len_dat_file / (self.readout_every_n_line * self.sum_bar)
if self.showBar_counter == 0:
self.showBar_counter = 1
self.bar_step = 0
self.bar_step_delta = int(self.sum_bar / self.len_dat_file)
if self.bar_step_delta == 0:
self.bar_step_delta = 1
else:
self.sum_bar = self.bar_step_delta*self.len_dat_file
self.readOut_range = range(0,self.len_dat_file,self.readout_every_n_line)
self.len_readOut_range = len(self.readOut_range)
self.step_in_readOut_range = 0
def _readOut(self, readout_one_line, end_readOut):
while self.step_in_readOut_range < self.len_readOut_range:
i = self.readOut_range[self.step_in_readOut_range]
#for i in readOut_range:
line = linecache.getline(self.dat_file, i+1)
file_dim = line[:-2].split(self.dim_seperator)
self._assignValues(file_dim)
if self.n == self.showBar_counter:
self.bar_step += self.bar_step_delta
_utils.statusBar(self.bar_step,self.sum_bar, 20)
self.n = 0
self.n+= 1
self.step_in_readOut_range += 1
if readout_one_line:
return False
if end_readOut:
return True
return True # means i'm done with readout
def _getMinMax(self,dims):
min_max = []
len_dims = len(dims)
for i in range(len_dims):
min_max.append([None,None])
for i in range(0,self.len_dat_file,self.readout_every_n_line):
line = linecache.getline(self.dat_file, i+1)
for d in range(len_dims):
value = eval(line[:-2].split(self.dim_seperator)[dims[d]])
if min_max[d][1] == None or value > min_max[d][1]:#max
min_max[d][1] = value
if min_max[d][0] == None or value < min_max[d][0]:#min
min_max[d][0] = value
return min_max