a
    ze?                     @   s  d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ g dZG dd dZG dd	 d	eZed	e G d
d deZede G dd deZede G dd dZG dd dZze W n ey   eZY n0 G dd dZdS )    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)StringIO)r   r   r   r   r   r   r   excel	excel_tabr
   r   r   r   r   r	   Snifferr   r   
DictReader
DictWriterunix_dialectc                   @   s@   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdd Zdd ZdS )r    FNc                 C   s   | j tkrd| _|   d S )NT)	__class__r   _valid	_validateself r   /usr/lib/python3.9/csv.py__init__*   s    
zDialect.__init__c              
   C   sB   zt |  W n0 ty< } ztt|W Y d }~n
d }~0 0 d S N)_Dialect	TypeErrorr   str)r   er   r   r   r   /   s    zDialect._validate)__name__
__module____qualname___namer   	delimiter	quotecharZ
escapechardoublequoteskipinitialspacelineterminatorquotingr    r   r   r   r   r   r      s   r   c                   @   s$   e Zd ZdZdZdZdZdZeZ	dS )r   ,"TF
N)
r&   r'   r(   r*   r+   r,   r-   r.   r   r/   r   r   r   r   r   6   s   r   c                   @   s   e Zd ZdZdS )r   	N)r&   r'   r(   r*   r   r   r   r   r   @   s   r   z	excel-tabc                   @   s$   e Zd ZdZdZdZdZdZeZ	dS )r   r0   r1   TF
N)
r&   r'   r(   r*   r+   r,   r-   r.   r   r/   r   r   r   r   r   E   s   r   Zunixc                   @   s@   e Zd ZdddZdd Zedd Zejd	d Zd
d ZdS )r   Nr   c                 O   s<   || _ || _|| _t||g|R i || _|| _d| _d S Nr   )_fieldnamesrestkeyrestvalr   dialectline_num)r   f
fieldnamesr7   r8   r9   argskwdsr   r   r   r    Q   s    zDictReader.__init__c                 C   s   | S r!   r   r   r   r   r   __iter__Z   s    zDictReader.__iter__c                 C   s>   | j d u r.zt| j| _ W n ty,   Y n0 | jj| _| j S r!   )r6   nextr   StopIterationr:   r   r   r   r   r<   ]   s    

zDictReader.fieldnamesc                 C   s
   || _ d S r!   )r6   )r   valuer   r   r   r<   g   s    c                 C   s   | j dkr| j t| j}| jj | _ |g kr8t| j}q$tt| j|}t| j}t|}||k rv||d  || j< n&||kr| j|d  D ]}| j||< q|S r5   )	r:   r<   r@   r   dictziplenr7   r8   )r   rowdZlfZlrkeyr   r   r   __next__k   s    



zDictReader.__next__)NNNr   )	r&   r'   r(   r    r?   propertyr<   setterrI   r   r   r   r   r   P   s     
	
	
r   c                   @   s6   e Zd ZdddZdd Zdd	 Zd
d Zdd ZdS )r   r   raiser   c                 O   sH   || _ || _| dvr$td| || _t||g|R i || _d S )N)rL   ignorez-extrasaction (%s) must be 'raise' or 'ignore')r<   r8   lower
ValueErrorextrasactionr   )r   r;   r<   r8   rP   r9   r=   r>   r   r   r   r       s    zDictWriter.__init__c                 C   s   t t| j| j}| |S r!   )rC   rD   r<   writerow)r   headerr   r   r   writeheader   s    zDictWriter.writeheaderc                    sN   j dkr8  j }|r8tdddd |D   fddjD S )NrL   z(dict contains fields not in fieldnames: z, c                 S   s   g | ]}t |qS r   )repr).0xr   r   r   
<listcomp>       z,DictWriter._dict_to_list.<locals>.<listcomp>c                 3   s   | ]}  |jV  qd S r!   )getr8   )rU   rH   rowdictr   r   r   	<genexpr>   rX   z+DictWriter._dict_to_list.<locals>.<genexpr>)rP   keysr<   rO   join)r   r[   Zwrong_fieldsr   rZ   r   _dict_to_list   s    
zDictWriter._dict_to_listc                 C   s   | j | |S r!   )r   rQ   r_   )r   r[   r   r   r   rQ      s    zDictWriter.writerowc                 C   s   | j t| j|S r!   )r   	writerowsmapr_   )r   Zrowdictsr   r   r   r`      s    zDictWriter.writerowsN)r   rL   r   )r&   r'   r(   r    rS   r_   rQ   r`   r   r   r   r   r      s     

r   c                   @   s6   e Zd Zdd ZdddZdd Zdd	 Zd
d ZdS )r   c                 C   s   g d| _ d S )N)r0   r3   ; :)	preferredr   r   r   r   r       s    zSniffer.__init__Nc                 C   sd   |  ||\}}}}|s(| ||\}}|s4tdG dd dt}||_||_|pVd|_||_|S )NzCould not determine delimiterc                   @   s   e Zd ZdZdZeZdS )zSniffer.sniff.<locals>.dialectZsniffedr2   N)r&   r'   r(   r)   r.   r   r/   r   r   r   r   r9      s   r9   r1   )_guess_quote_and_delimiter_guess_delimiterr   r   r,   r*   r+   r-   )r   sample
delimitersr+   r,   r*   r-   r9   r   r   r   sniff   s    


zSniffer.sniffc              	   C   s  g }dD ]*}t |t jt jB }||}|r q4q|s<dS i }i }d}|j}	|D ]}
|	d d }|
| }|r||dd ||< z|	d d }|
| }W n ty   Y qRY n0 |r|d u s||v r||dd ||< z|	d d }W n ty   Y qRY n0 |
| rR|d7 }qRt||jd}|rTt||jd}|| |k}|d	kr\d
}nd
}d}t dt 	||d t j}|
|rd}nd}||||fS )N)zI(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?P=delim)zG(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?P<delim>[^\w\n"\'])(?P<space> ?)zG(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)z-(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?:$|\n))r   FNr   r   quote   delimspacerH   r4   r   z]((%(delim)s)|^)\W*%(quote)s[^%(delim)s\n]*%(quote)s[^%(delim)s\n]*%(quote)s\W*((%(delim)s)|$))rm   rk   TF)recompileDOTALL	MULTILINEfindall
groupindexrY   KeyErrormaxescapesearch)r   datari   matchesZrestrZregexpZquotesdelimsspacesru   mnrH   r+   rm   r-   Z	dq_regexpr,   r   r   r   rf      s`    




z"Sniffer._guess_quote_and_delimiterc                 C   s   t td |d}dd tdD }tdt|}d}i }i }i }d| }	}
|	t|k rR|d7 }||	|
 D ]@}|D ]6}||i }||}||dd ||< |||< qxqp| D ]}t || 	 }t|dkr|d d dkrqt|dkrLt
|dd	 d
||< |||  || d || d tdd |D  f||< q|d ||< q|	 }tt|| t|}d}d}t|dkr||kr|D ]T\}}|d dkr|d dkr|d | |kr|d u s||v r|||< q|d8 }qt|dkrDt | d }|d ||d d| k}||fS |
}	|
|7 }
qN|s\dS t|dkr| jD ]@}|| v rp|d ||d d| k}||f  S qpdd |	 D }|  |d d }|d ||d d| k}||fS )Nr4   c                 S   s   g | ]}t |qS r   )chr)rU   cr   r   r   rW   -  rX   z,Sniffer._guess_delimiter.<locals>.<listcomp>   
   r   rl   c                 S   s   | d S )Nrl   r   )rV   r   r   r   <lambda>G  rX   z*Sniffer._guess_delimiter.<locals>.<lambda>ro   c                 s   s   | ]}|d  V  qdS )rl   Nr   )rU   itemr   r   r   r\   L  rX   z+Sniffer._guess_delimiter.<locals>.<genexpr>g      ?g?g{Gz?z%c )r   r   c                 S   s   g | ]\}}||fqS r   r   )rU   kvr   r   r   rW   v  rX   )listfiltersplitrangeminrE   rY   countr]   itemsrw   removesumfloatre   sort)r   rz   ri   asciiZchunkLengthZ	iterationZcharFrequencyZmodesr|   startendlinecharZmetaFrequencyZfreqr   ZmodeListtotalZconsistencyZ	thresholdr   r   rm   r-   rG   r   r   r   rg     s    



zSniffer._guess_delimiterc                 C   s  t t|| |}t|}t|}i }t|D ]}d ||< q0d}|D ]}|dkrV q|d7 }t||krlqFt| D ]v}	tt	t
fD ]2}
z|
||	  W  qW q ttfy   Y q0 qt||	 }
|
||	 krx||	 d u r|
||	< qx||	= qxqFd}| D ]z\}	}t|tdkr>t||	 |kr4|d7 }n|d8 }qz|||	  W n  ttfyn   |d7 }Y q0 |d8 }q|dkS )Nr      rl   )r   r   rj   r@   rE   r   r   r]   intr   complexrO   OverflowErrorr   typer#   )r   rh   ZrdrrR   columnsZcolumnTypesicheckedrF   colZthisTypeZ	hasHeaderZcolTyper   r   r   
has_header  sH    






zSniffer.has_header)N)r&   r'   r(   r    rj   rf   rg   r   r   r   r   r   r      s
   
Lgr   )rp   Z_csvr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r"   ior   __all__r   r   r   r   r   r   	NameErrorr   r   r   r   r   r   <module>   s$   @


2
