'Loads data from a file
:param path: filename
:type path: string
:param force: Cleans already added data
:type force: Boolean
:param sep: Separator among the fields of the file content
:type sep: string
:param format: Format of the file content.
Default format is \'value\': 0 (first field), then \'row\': 1, and \'col\': 2.
E.g: format={\'row\':0, \'col\':1, \'value\':2}. The row is in position 0,
then there is the column value, and finally the rating.
So, it resembles to a matrix in plain format
:type format: dict()
:param pickle: is input file in  pickle format?
:type pickle: Boolean'

def load(self, path, force=True, sep=' DCTB ', format=None, pickle=False):

    if VERBOSE:
        sys.stdout.write(('Loading    %s\n' % path))
    if force:
        self._data = list([])
    if pickle:
        self._load_pickle(path)
    else:
        i = 0
        for line in codecs.open(path, 'r', 'utf8'):
            data = line.strip('\r\n').split(sep)
            value = None
            if (not data):
                raise TypeError('Data    is    empty    or    None!')
            if (not format):
                try:
                    (value, row_id, col_id) = data
                except:
                    value = 1
                    (row_id, col_id) = data
            else:
                try:
                    try:
                        value = data[format['value']]
                    except KeyError as ValueError:
                        value = 1
                    try:
                        row_id = data[format['row']]
                    except KeyError:
                        row_id = data[1]
                    try:
                        col_id = data[format['col']]
                    except KeyError:
                        col_id = data[2]
                    row_id = row_id.strip()
                    col_id = col_id.strip()
                    if (format.has_key('ids') and ((format['ids'] == int) or (format['ids'] == 'int'))):
                        try:
                            row_id = int(row_id)
                        except:
                            print ('Error    (ID    is    not    int)    while    reading:    %s' % data)
                            continue
                        try:
                            col_id = int(col_id)
                        except:
                            print ('Error    (ID    is    not    int)    while    reading:    %s' % data)
                            continue
                except IndexError:
                    print ('Error    while    reading:    %s' % data)
                    continue
            try:
                row_id = int(row_id)
            except:
                pass
            try:
                col_id = int(col_id)
            except:
                pass
            try:
                self.add_tuple((float(value), row_id, col_id))
            except:
                if VERBOSE:
                    sys.stdout.write(('\nError    while    reading    (%s,    %s,    %s).    Skipping    this    tuple\n' % (value, row_id, col_id)))
            i += 1
            if VERBOSE:
                if ((i % 100000) == 0):
                    sys.stdout.write('.')
                if ((i % 1000000) == 0):
                    sys.stdout.write('|')
                if ((i % 10000000) == 0):
                    sys.stdout.write(('    (%d    M)\n' % int((i / 1000000))))
        if VERBOSE:
            sys.stdout.write('\n')
