1919def loadData (filename , minrows = 10 , headers = False , hdel = '=' , hignore = None , ** kwargs ):
2020 """Find and load data from a text file.
2121
22- The data reading starts at the first matrix block of at least minrows rows
23- and constant number of columns. This seems to work for most of the
24- datafiles including those generated by PDFGetX2.
22+ The data block is identified as the first matrix block of at least minrows rows
23+ and constant number of columns. This seems to work for most of the datafiles including
24+ those generated by PDFGetX2.
2525
26- filename -- name of the file we want to load data from.
27- minrows -- minimum number of rows in the first data block.
28- All rows must have the same number of floating point values.
29- headers -- return also a dictionary of parameters specified in header
30- hdel -- delimiter for parsing header information
31- hignore -- ignore header rows beginning with any elements in the hignore list
32- usecols -- zero-based index of columns to be loaded, by default use
33- all detected columns. The reading skips data blocks that
34- do not have the usecols-specified columns.
35- unpack -- return data as a sequence of columns that allows tuple
36- unpacking such as x, y = loadData(FILENAME, unpack=True).
37- Note transposing the loaded array as loadData(FILENAME).T
38- has the same effect.
39- kwargs -- keyword arguments that are passed to numpy.loadtxt
26+ filename -- name of the file we want to load data from.
27+ minrows -- minimum number of rows in the first data block.
28+ All rows must have the same number of floating point values.
29+ headers -- when False (defualt), the function returns a numpy array of the
30+ data in the data block. When True, the function instead returns a
31+ dictionary of parameters and their corresponding values parsed from
32+ header (information prior the data block). See hdel and hignore for
33+ options to help with parsing header information.
34+ hdel -- (only used when headers enabled) delimiter for parsing header
35+ information (default '='). e.g. using default hdel, the line
36+ 'parameter = p_value' is put into the dictionary as
37+ {parameter: p_value}.
38+ hignore -- (only used when headers enabled) ignore header rows beginning
39+ with any elements in the hignore list. e.g. hignore=['# ', '[']
40+ means the following lines are skipped: '# qmax=10', '[defaults]'.
41+ kwargs -- keyword arguments that are passed to numpy.loadtxt including
42+ the following arguments below. (See also numpy.loadtxt for more
43+ details.)
44+ delimiter -- delimiter for the data in the block (default use whitespace).
45+ For comma-separated data blocks, set delimiter to ','.
46+ usecols -- zero-based index of columns to be loaded, by default use
47+ all detected columns. The reading skips data blocks that
48+ do not have the usecols-specified columns.
49+ unpack -- return data as a sequence of columns that allows tuple
50+ unpacking such as x, y = loadData(FILENAME, unpack=True).
51+ Note transposing the loaded array as loadData(FILENAME).T
52+ has the same effect.
4053
41- Return a numpy array of the data.
42- See also numpy.loadtxt for more details .
54+ Return a numpy array of the data. If headers enabled, instead returns a
55+ dictionary of parameters read from the header .
4356 """
4457 from numpy import array , loadtxt
4558 # for storing header data
@@ -124,6 +137,11 @@ def countcolumnsvalues(line):
124137 # block was found here!
125138 if nrows >= minrows :
126139 break
140+
141+ # Return header data if requested
142+ if headers :
143+ return hdata # Return, so do not proceed to reading datablock
144+
127145 # Return an empty array when no data found.
128146 # loadtxt would otherwise raise an exception on loading from EOF.
129147 if start is None :
@@ -134,11 +152,6 @@ def countcolumnsvalues(line):
134152 # in case of trailing delimiters.
135153 kwargs .setdefault ('usecols' , list (range (ncvblock [0 ])))
136154 rv = loadtxt (fid , ** kwargs )
137-
138- # return headers if requested
139- if headers :
140- return hdata , rv
141- # otherwise do not
142155 return rv
143156
144157
0 commit comments