3 \4?�@sHddlZddlmZmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZddlmZddlmZddlmZdddd d d d d dddddddddddddgZGdd �d �ZGdd �d e�Zed e�Gdd�de�Zede�Gdd�de�Zed e�Gd!d�d�ZGd"d�d�ZyeWnek �r4eZYnXGd#d�d�ZdS)$�N)�Error� __version__�writer�reader�register_dialect�unregister_dialect� get_dialect� list_dialects�field_size_limit� QUOTE_MINIMAL� QUOTE_ALL�QUOTE_NONNUMERIC� QUOTE_NONE�__doc__)�Dialect)� OrderedDict)�StringIOr r r rrrr�excel� excel_tabr rrrrr �Snifferrr� DictReader� DictWriter� unix_dialectc@s@eZdZdZdZdZdZdZdZdZ dZ dZ dd�Z dd�Z dS)r�FNcCs|jtkrd|_|j�dS)NT)� __class__r�_valid� _validate)�self�r�/usr/lib64/python3.6/csv.py�__init__+s zDialect.__init__cCs@y t|�Wn.tk r:}ztt|���WYdd}~XnXdS)N)�_Dialect� TypeErrorr�str)r�errrr0s zDialect._validate)�__name__� __module__� __qualname__�_namer� delimiter� quotecharZ escapechar� doublequote�skipinitialspace�lineterminator�quotingr rrrrrrsc@s$eZdZdZdZdZdZdZeZ dS)r�,�"TFz N) r%r&r'r)r*r+r,r-r r.rrrrr7s c@seZdZdZdS)r� N)r%r&r'r)rrrrrAsz excel-tabc@s$eZdZdZdZdZdZdZeZ dS)rr/r0TF� N) r%r&r'r)r*r+r,r-r r.rrrrrFs Zunixc@s@eZdZd dd�Zdd�Zedd��Zejd d��Zd d �ZdS) rNrcOs6||_||_||_t||f|�|�|_||_d|_dS)Nr)� _fieldnames�restkey�restvalr�dialect�line_num)r�f� fieldnamesr4r5r6�args�kwdsrrrr Rs zDictReader.__init__cCs|S)Nr)rrrr�__iter__[szDictReader.__iter__c Cs@|jdkr0yt|j�|_Wntk r.YnX|jj|_|jS)N)r3�nextr� StopIterationr7)rrrrr9^s  zDictReader.fieldnamescCs ||_dS)N)r3)r�valuerrrr9hscCs�|jdkr|jt|j�}|jj|_x|gkr:t|j�}q&Wtt|j|��}t|j�}t|�}||krz||d�||j<n*||kr�x |j|d�D]}|j||<q�W|S)Nr) r7r9r=rr�zip�lenr4r5)r�row�dZlfZlr�keyrrr�__next__ls     zDictReader.__next__)NNNr) r%r&r'r r<�propertyr9�setterrErrrrrQs   c@s6eZdZddd�Zdd�Zdd �Zd d �Zd d �ZdS)rr�raisercOsB||_||_|j�dkr$td|��||_t||f|�|�|_dS)NrH�ignorez-extrasaction (%s) must be 'raise' or 'ignore')rHrI)r9r5�lower� ValueError� extrasactionr)rr8r9r5rLr6r:r;rrrr �s zDictWriter.__init__cCs tt|j|j��}|j|�dS)N)�dictr@r9�writerow)r�headerrrr� writeheader�szDictWriter.writeheadercsN�jdkr8�j��j}|r8tddjdd�|D������fdd��jD�S)NrHz(dict contains fields not in fieldnames: z, cSsg|] }t|��qSr)�repr)�.0�xrrr� �sz,DictWriter._dict_to_list..c3s|]}�j|�j�VqdS)N)�getr5)rRrD)�rowdictrrr� �sz+DictWriter._dict_to_list..)rL�keysr9rK�join)rrVZ wrong_fieldsr)rVrr� _dict_to_list�s  zDictWriter._dict_to_listcCs|jj|j|��S)N)rrNrZ)rrVrrrrN�szDictWriter.writerowcCs|jjt|j|��S)N)r� writerows�maprZ)rZrowdictsrrrr[�szDictWriter.writerowsN)rrHr)r%r&r'r rPrZrNr[rrrrr�s  c@s6eZdZdd�Zd dd�Zdd�Zdd �Zd d �ZdS) rcCsdddddg|_dS)Nr/r1�;� �:)� preferred)rrrrr �szSniffer.__init__NcCsd|j||�\}}}}|s(|j||�\}}|s4td��Gdd�dt�}||_||_|pVd|_||_|S)NzCould not determine delimiterc@seZdZdZdZeZdS)zSniffer.sniff..dialectZsniffedz N)r%r&r'r(r-r r.rrrrr6�sr6r0)�_guess_quote_and_delimiter�_guess_delimiterrrr+r)r*r,)r�sample� delimitersr*r+r)r,r6rrr�sniff�s  z Sniffer.sniffcCs�g}x0dD](}tj|tjtjB�}|j|�}|r Pq W|s>dSi}i}d}|j} x�|D]�} | dd } | | } | r�|j| d�d || <y| d d } | | } Wntk r�wVYnX| r�|dks�| |kr�|j| d�d || <y| d d } Wntk �rwVYnX| | rV|d 7}qVWt||jd �} |�rZt||jd �}|||k}|d k�rbd}nd}d}tjdtj |�| d�tj�}|j |��r�d}nd}| |||fS)N�I(?P[^\w\n"\'])(?P ?)(?P["\']).*?(?P=quote)(?P=delim)�G(?:^|\n)(?P["\']).*?(?P=quote)(?P[^\w\n"\'])(?P ?)�G(?P[^\w\n"\'])(?P ?)(?P["\']).*?(?P=quote)(?:$|\n)�-(?:^|\n)(?P["\']).*?(?P=quote)(?:$|\n)rFr�quote��delimZspace)rDr2z]((%(delim)s)|^)\W*%(quote)s[^%(delim)s\n]*%(quote)s[^%(delim)s\n]*%(quote)s\W*((%(delim)s)|$))rlrjT)rfrgrhri)rFNr) �re�compile�DOTALL� MULTILINE�findall� groupindexrU�KeyError�max�escape�search)r�datardZmatchesZrestrZregexpZquotes�delimsZspacesrr�m�nrDr*rlr,Z dq_regexpr+rrrra�s`          z"Sniffer._guess_quote_and_delimitercCsttd|jd���}dd�td�D�}tdt|��}d}i}i}i}dt|t|��} } �x| t|�k�rn|d7}xT|| | �D]D} x>|D]6} |j| i�} | j| �}| j|d�d| |<| || <q�Wq�Wx�|j�D]�} t|| j ��}t|�dk�r|dddk�rq�t|�dk�rht |dd �d �|| <|j || �|| d|| dt d d �|D��f|| <q�|d|| <q�W|j �}t ||�}d }d}x�t|�dk�r||k�rx\|D]T\}}|ddk�r�|ddk�r�|d||k�r�|dk�s�||k�r�|||<�q�W|d8}�q�Wt|�dk�r`t|j��d}|dj|�|djd|�k}||fS| } | |7} q\W|�szdSt|�dk�r�xF|jD]<}||j�k�r�|dj|�|djd|�k}||fS�q�Wdd�|j �D�}|j�|dd}|dj|�|djd|�k}||fS)Nr2cSsg|] }t|��qSr)�chr)rR�crrrrT.sz,Sniffer._guess_delimiter..�� rrkcSs|dS)Nrkr)rSrrr�Hsz*Sniffer._guess_delimiter..)rDcss|]}|dVqdS)rkNr)rR�itemrrrrWMsz+Sniffer._guess_delimiter..g�?g�������?g{�G�z�?z%c rcSsg|]\}}||f�qSrr)rR�k�vrrrrTws)rr�����)�list�filter�split�range�minrArU�countrX�itemsrt�remove�sum�floatr`�sort)rrwrd�asciiZ chunkLengthZ iterationZ charFrequencyZmodesrx�start�end�line�charZ metaFrequencyZfreqr�ZmodeListZtotalZ consistencyZ thresholdr�r�rlr,rCrrrrbst           zSniffer._guess_delimiterc Cs�tt|�|j|��}t|�}t|�}i}xt|�D] }d||<q2Wd}x�|D]�}|dkrZP|d7}t|�|krpqLx�t|j��D]x} xJtt t gD]0} y| || �PWq�t t fk r�Yq�Xq�Wt|| �} | || kr~|| dkr�| || <q~|| =q~WqLWd} x�|j �D]~\} } t| �td�k�rLt|| �| k�rB| d7} n| d8} ns0@       2