3
d                 @   sR   d Z ddlmZmZmZmZmZ ddlmZ G dd deeZ	G dd deZ
dS )	zCSV Handling utilities
   )traitsTraitedSpecDynamicTraitedSpecFileBaseInterface)
add_traitsc               @   s*   e Zd ZeddddZejddddZdS )CSVReaderInputSpecTz&Input comma-seperated value (CSV) file)exists	mandatorydescFz)True if the first line is a column header)Z
usedefaultr   N)__name__
__module____qualname__r   in_filer   ZBoolheader r   r   ?/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/utility/csv.pyr   
   s   r   c                   s\   e Zd ZdZeZeZdZdd Z	dd Z
dd Zd	d
 Z fddZdd Zdd Z  ZS )	CSVReadera  
    Examples
    --------

    >>> reader = CSVReader()  # doctest: +SKIP
    >>> reader.inputs.in_file = 'noHeader.csv'  # doctest: +SKIP
    >>> out = reader.run()  # doctest: +SKIP
    >>> out.outputs.column_0 == ['foo', 'bar', 'baz']  # doctest: +SKIP
    True
    >>> out.outputs.column_1 == ['hello', 'world', 'goodbye']  # doctest: +SKIP
    True
    >>> out.outputs.column_2 == ['300.1', '5', '0.3']  # doctest: +SKIP
    True

    >>> reader = CSVReader()  # doctest: +SKIP
    >>> reader.inputs.in_file = 'header.csv'  # doctest: +SKIP
    >>> reader.inputs.header = True  # doctest: +SKIP
    >>> out = reader.run()  # doctest: +SKIP
    >>> out.outputs.files == ['foo', 'bar', 'baz']  # doctest: +SKIP
    True
    >>> out.outputs.labels == ['hello', 'world', 'goodbye']  # doctest: +SKIP
    True
    >>> out.outputs.erosion == ['300.1', '5', '0.3']  # doctest: +SKIP
    True

    Tc             C   s,   x&t | j|D ]\}}|| j| qW |S )N)zip
_outfieldsappend)selfoutputsentrykeyvaluer   r   r   _append_entry3   s    zCSVReader._append_entryc             C   s$   |j dd}dd |jdD }|S )N
 c             S   s   g | ]}|j  qS r   )strip).0xr   r   r   
<listcomp>:   s    z)CSVReader._parse_line.<locals>.<listcomp>,)replacesplit)r   liner   r   r   r   _parse_line8   s    zCSVReader._parse_linec             C   s^   t | jjdD}| j|j }| jjr2t|| _ntdd tt	|D | _W d Q R X | jS )Nrc             S   s   g | ]}d t | qS )Zcolumn_)str)r    r!   r   r   r   r"   C   s    z,CSVReader._get_outfields.<locals>.<listcomp>)
openinputsr   r'   readliner   tupler   rangelen)r   fidr   r   r   r   _get_outfields=   s    &zCSVReader._get_outfieldsc             C   s   | j   |S )N)r1   )r   Zruntimer   r   r   _run_interfaceF   s    zCSVReader._run_interfacec                s   | j tt| j S )N)_add_output_traitssuperr   _outputs)r   )	__class__r   r   r5   J   s    zCSVReader._outputsc             C   s   t || j S )N)r   r1   )r   baser   r   r   r3   M   s    zCSVReader._add_output_traitsc             C   s   | j  j }d}x| jD ]}g ||< qW t| jjd@}x8|j D ],}| jjrX|rXd}qB| j|}| j	||}qBW W d Q R X |S )NTr(   F)
output_specgetr   r*   r+   r   	readlinesr   r'   r   )r   r   ZisHeaderr   r0   r&   r   r   r   r   _list_outputsP   s    
zCSVReader._list_outputs)r   r   r   __doc__r   Z
input_specr   r8   Z_always_runr   r'   r1   r2   r5   r3   r;   __classcell__r   r   )r6   r   r      s   	r   N)r<   r7   r   r   r   r   r   ior   r   r   r   r   r   r   <module>   s   	