Changeset 10528:26febe743732 in orange


Ignore:
Timestamp:
03/14/12 20:35:36 (2 years ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Fixes to load_csv interface.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/data/io.py

    r10255 r10528  
    480480    elif cell == "": 
    481481        return variable.Descriptor 
    482     elif len(cell.split(",")) > 1: 
    483         return variable.Discrete, cell.split(",") 
     482    elif len(split_escaped_str(cell, " ")) > 1: 
     483        return variable.Discrete, split_escaped_str(cell, " ") 
    484484    else: 
    485485        raise ValueError("Unknown variable type definition %r." % cell) 
     
    581581    return False 
    582582 
    583 def load_csv(file, create_new_on=MakeStatus.Incompatible, **kwargs): 
     583def load_csv(file, create_new_on=MakeStatus.Incompatible,  
     584             delimiter=None, quotechar=None, escapechar=None, 
     585             has_header=None, has_types=None, has_annotations=None, **kwargs): 
    584586    """ Load an Orange.data.Table from s csv file. 
    585587    """ 
     
    589591    sample = file.read(5 * 2 ** 20) # max 5MB sample TODO: What if this is not enough. Try with a bigger sample 
    590592    dialect = snifer.sniff(sample) 
    591     has_header = snifer.has_header(sample) 
     593     
     594    if has_header is None: 
     595        has_header = snifer.has_header(sample) 
     596     
    592597    file.seek(0) # Rewind 
    593     reader = csv.reader(file, dialect=dialect) 
     598     
     599    def kwparams(**kwargs): 
     600        """Return not None kwargs. 
     601        """ 
     602        return dict([(k, v) for k, v in kwargs.items() if v is not None]) 
     603     
     604    fmtparam = kwparams(delimiter=delimiter, 
     605                        quotechar=quotechar, 
     606                        escapechar=escapechar) 
     607     
     608    reader = csv.reader(file, dialect=dialect, 
     609                        **fmtparam) 
    594610 
    595611    header = types = var_attrs = None 
    596612 
    597 #    if not has_header: 
    598 #        raise ValueError("No header in the data file.") 
    599  
    600     header = reader.next() 
    601  
    602     if header: 
    603         # Try to get variable definitions 
    604         types_row = reader.next() 
    605         if is_var_types_row(types_row): 
    606             types = var_types(types_row) 
    607  
    608     if types: 
    609         # Try to get the variable attributes 
    610         # (third line in the standard orange tab format). 
    611         labels_row = reader.next() 
    612         if is_var_attributes_row(labels_row): 
    613             var_attrs = var_attributes(labels_row) 
    614  
    615     # If definitions not present fill with blanks 
     613    row = first_row = reader.next() 
     614     
     615    if has_header: 
     616        header = row 
     617        # Eat this row and move to the next 
     618        row = reader.next() 
     619 
     620    # Guess types row 
     621    if has_types is None: 
     622        has_types = has_header and is_var_types_row(row) 
     623         
     624    if has_types: 
     625        types = var_types(row) 
     626        # Eat this row and move to the next 
     627        row = reader.next() 
     628 
     629    # Guess variable annotations row 
     630    if has_annotations is None: 
     631        has_annotations = has_header and has_types and \ 
     632                          is_var_attributes_row(row) 
     633         
     634    if has_annotations: 
     635        labels_row = row 
     636        var_attrs = var_attributes(row) 
     637        # Eat this row and move to the next 
     638        row = reader.next() 
     639 
     640    if not header: 
     641        # Create a default header 
     642        header = ["F_%i" % i for i in range(len(first_row))] 
     643         
    616644    if not types: 
     645        # Create blank variable types 
    617646        types = [None] * len(header) 
     647         
    618648    if not var_attrs: 
     649        # Create blank variable attributes 
    619650        var_attrs = [None] * len(header) 
    620651 
    621652    # start from the beginning 
    622653    file.seek(0) 
    623     reader = csv.reader(file, dialect=dialect) 
    624     for defined in [header, types, var_attrs]: 
    625         if any(defined): # skip definition rows if present in the file 
     654    reader = csv.reader(file, dialect=dialect, **fmtparam) 
     655     
     656    for defined in [has_header, has_types, has_annotations]: 
     657        if defined:  
     658            # skip definition rows if present in the file 
    626659            reader.next() 
    627  
     660     
    628661    variables = [] 
    629662    undefined_vars = [] 
Note: See TracChangeset for help on using the changeset viewer.