grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026§  Åq5ᙊ�ãó˜—dZddlZddlmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZddlmZddlmZgd¢ZGd„d¦«ZGd „d e¦«Zed e¦«Gd „d e¦«Zed e¦«Gd„de¦«Zede¦«Gd„d¦«ZGd„d¦«Z en #e$reZYnwxYwGd„d¦«ZdS)z+ csv.py - read/write/investigate CSV files é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 rrrrrÚexcelÚ excel_tabr rrrr r ÚSnifferrrÚ DictReaderÚ DictWriterÚ unix_dialectcóB—eZdZdZdZdZdZdZdZdZ dZ dZ dZ d„Z d„ZdS)rzÄDescribe a CSV dialect. This must be subclassed (see csv.excel). Valid attributes are: delimiter, quotechar, escapechar, doublequote, skipinitialspace, lineterminator, quoting. ÚFNcó\—|jtkrd|_| ¦«dS)NT)Ú __class__rÚ_validÚ _validate©Úselfs ú*/opt/alt/python311/lib64/python3.11/csv.pyÚ__init__zDialect.__init__*s,€Ø Œ>�WÒ $Ð $؈DŒKØ �ŠÑÔÐÐÐócó‚— t|¦«dS#t$r!}tt|¦«¦«‚d}~wwxYw©N)Ú_DialectÚ TypeErrorrÚstr)r Úes r!rzDialect._validate/sG€ð Ý �T‰NŒNˆNˆNˆNøÝð ð ð å�˜A™œ‘-”-Ð øøøøð øøøs‚“ >�9¹>)Ú__name__Ú __module__Ú __qualname__rÚ_namerÚ delimiterÚ quotecharÚ escapecharÚ doublequoteÚskipinitialspaceÚlineterminatorÚquotingr"r©r#r!rrsl€€€€€ððð €EØ €Fà€IØ€IØ€JØ€KØÐØ€NØ€Gðððð  ð ð ð ð r#rcó*—eZdZdZdZdZdZdZdZe Z dS)rz;Describe the usual properties of Excel-generated CSV files.ú,ú"TFú N) r*r+r,rr.r/r1r2r3r r4r5r#r!rr6s3€€€€€ØEÐEØ€IØ€IØ€KØÐØ€NØ€G€G€Gr#rcó—eZdZdZdZdS)rzEDescribe the usual properties of Excel-generated TAB-delimited files.ú N)r*r+r,rr.r5r#r!rr@s€€€€€ØOÐOØ€I€I€Ir#rz excel-tabcó*—eZdZdZdZdZdZdZdZe Z dS)rz:Describe the usual properties of Unix-generated CSV files.r7r8TFú N) r*r+r,rr.r/r1r2r3r r4r5r#r!rrEs3€€€€€ØDÐDØ€IØ€IØ€KØÐØ€NØ€G€G€Gr#rÚunixcó\—eZdZ dd„Zd„Zed„¦«Zejd„¦«Zd„ZdS) rNrcóx—||_||_||_t||g|¢Ri|¤Ž|_||_d|_dS©Nr)Ú _fieldnamesÚrestkeyÚrestvalrÚdialectÚline_num)r ÚfÚ fieldnamesrCrDrEÚargsÚkwdss r!r"zDictReader.__init__QsK€à%ˆÔ؈Œ ؈Œ ݘQ Ð7¨$Ð7Ð7Ð7°$Ð7Ð7ˆŒ ؈Œ ؈Œ ˆ ˆ r#có—|Sr%r5rs r!Ú__iter__zDictReader.__iter__Zs€Øˆ r#có–—|j€+ t|j¦«|_n#t$rYnwxYw|jj|_|jSr%)rBÚnextrÚ StopIterationrFrs r!rHzDictReader.fieldnames]sZ€à Ô Ð #ð Ý#'¨¬ Ñ#4Ô#4�Ô Ð øÝ ð ð ð Ø�ð øøøàœ Ô,ˆŒ ØÔÐs ‰#£ 0¯0có—||_dSr%)rB)r Úvalues r!rHzDictReader.fieldnamesgs€à ˆÔÐÐr#có´—|jdkr|jt|j¦«}|jj|_|gkrt|j¦«}|gk°t t |j|¦«¦«}t |j¦«}t |¦«}||kr||d…||j<n"||kr|j|d…D] }|j||<Œ |SrA) rFrHrNrÚdictÚzipÚlenrCrD)r ÚrowÚdÚlfÚlrÚkeys r!Ú__next__zDictReader.__next__ksÜ€Ø Œ=˜AÒ Ð à ŒOˆOÝ�4”;ÑԈ؜ Ô,ˆŒ ð �RŠiˆiÝ�t”{Ñ#Ô#ˆCð�RŠiˆiå •�T”_ cÑ*Ô*Ñ +Ô +ˆÝ �”Ñ !Ô !ˆÝ �‰XŒXˆØ �Š7ˆ7Ø! " # #œhˆAˆdŒl‰OˆOØ �"ŠWˆWØ” r s sÔ+ð &ð &�Øœ��#‘�؈r#)NNNr) r*r+r,r"rLÚpropertyrHÚsetterr[r5r#r!rrPs†€€€€€ØAEØ ððððððððð ð ñ„Xð ðÔð!ð!ñÔð!ðððððr#rcó2—eZdZ d d„Zd„Zd„Zd„Zd„Zd S) rrÚraisercó¬—||_||_| ¦«dvrtd|z¦«‚||_t ||g|¢Ri|¤Ž|_dS)N)r_Úignorez-extrasaction (%s) must be 'raise' or 'ignore')rHrDÚlowerÚ ValueErrorÚ extrasactionr)r rGrHrDrdrErIrJs r!r"zDictWriter.__init__ƒsr€à$ˆŒØˆŒ Ø × Ò Ñ Ô Ð':Ð :Ð :ÝÐLØ+ñ,ñ-ô-ð -à(ˆÔݘQ Ð7¨$Ð7Ð7Ð7°$Ð7Ð7ˆŒ ˆ ˆ r#cóz—tt|j|j¦«¦«}| |¦«Sr%)rSrTrHÚwriterow)r Úheaders r!Ú writeheaderzDictWriter.writeheader�s/€Ý•c˜$œ/¨4¬?Ñ;Ô;Ñ<Ô<ˆØ�}Š}˜VÑ$Ô$Ð$r#cóÞ‡‡—‰jdkrM‰ ¦«‰jz }|r/tdd d„|D¦«¦«z¦«‚ˆˆfd„‰jD¦«S)Nr_z(dict contains fields not in fieldnames: z, có,—g|]}t|¦«‘ŒSr5)Úrepr)Ú.0Úxs r!ú z,DictWriter._dict_to_list..–s€Ð-LÐ-LÐ-L¸!­d°1©g¬gÐ-LÐ-LÐ-Lr#c3óN•K—|]}‰ |‰j¦«V—Œ dSr%)ÚgetrD)rlrZÚrowdictr s €€r!ú z+DictWriter._dict_to_list..—s3øèè€ÐJÐJ°3�— ’ ˜C ¤Ñ.Ô.ÐJÐJÐJÐJÐJÐJr#)rdÚkeysrHrcÚjoin)r rqÚ wrong_fieldss`` r!Ú _dict_to_listzDictWriter._dict_to_list‘sŠøø€Ø Ô  Ò 'Ð 'Ø"Ÿ<š<™>œ>¨D¬OÑ;ˆLØð OÝ Ð!KØ#'§9¢9Ð-LÐ-L¸|Ð-LÑ-LÔ-LÑ#MÔ#Mñ"NñOôOðOàJÐJÐJÐJÐJ¸$¼/ÐJÑJÔJÐJr#có\—|j | |¦«¦«Sr%)rrfrv)r rqs r!rfzDictWriter.writerow™s&€ØŒ{×#Ò# D×$6Ò$6°wÑ$?Ô$?Ñ@Ô@Ð@r#có\—|j t|j|¦«¦«Sr%)rÚ writerowsÚmaprv)r Úrowdictss r!ryzDictWriter.writerowsœs%€ØŒ{×$Ò$¥S¨Ô);¸XÑ%FÔ%FÑGÔGÐGr#N)rr_r)r*r+r,r"rhrvrfryr5r#r!rr‚su€€€€€Ø?FØ ð8ð8ð8ð8ð%ð%ð%ðKðKðKðAðAðAðHðHðHðHðHr#rcó2—eZdZdZd„Zdd„Zd„Zd„Zd„ZdS) rze "Sniffs" the format of a CSV file (i.e. delimiter, quotechar) Returns a Dialect object. có—gd¢|_dS)N)r7r;ú;ú ú:)Ú preferredrs r!r"zSniffer.__init__ªs€à3Ð3Ð3ˆŒˆˆr#NcóJ—| dd¦« dd¦«}| ||¦«\}}}}|s| ||¦«\}}|std¦«‚Gd„dt¦«}||_||_|pd|_||_|S)zI Returns a dialect (or None) corresponding to the sample r9r=ú zCould not determine delimitercó—eZdZdZdZeZdS)úSniffer.sniff..dialectÚsniffedr9N)r*r+r,r-r3r r4r5r#r!rEr…¿s€€€€€ØˆEØ#ˆNØ#ˆGˆGˆGr#rEr8) ÚreplaceÚ_guess_quote_and_delimiterÚ_guess_delimiterrrr1r.r/r2)r ÚsampleÚ delimitersr/r1r.r2rEs r!Úsniffz Sniffer.sniff¯sä€ð —’ ¨Ñ-Ô-×5Ò5°d¸DÑAÔAˆð×2Ò2°6¸:ÑFÔFñ <ˆ �;  Ð+;àð LØ*.×*?Ò*?ÀØ@Jñ+Lô+LÑ 'ˆIÐ'ðð 9ÝÐ7Ñ8Ô8Ð 8ð $ð $ð $ð $ð $•gñ $ô $ð $ð *ˆÔØ%ˆÔà%Ð,¨ˆÔØ#3ˆÔ àˆr#c󢇗d}g}dD]J}tj||ztjtjz¦«}| |¦«}|rnŒK|sdSi}i}d} |j} |D]¦} | ddz } | | } | r| | d¦«dz|| < | ddz } | | } n#t$rYŒTwxYw| r"|�| |vr| | d¦«dz|| < | d dz } n#t$rYŒ•wxYw| | r| dz } Œ§t||j¬ ¦«}|r+t||j¬ ¦«}||| k}|d krd }nd }d}d }|rstjdtj |¦«||dkrdnd dœztj¦«}|dzŠtˆfd„|  |¦«D¦«¦«}||||fS)a� Looks for text enclosed between two identical quotes (the probable quotechar) which are preceded and followed by the same character (the probable delimiter). For example: ,'some text', The quote with the most wins, same with the delimiter. If there is no quotechar the delimiter can't be determined this way. z#(?:(?P=quote){2}|(?!(?P=quote)).)*+)zH(?P[^\w\n"\'])(?P ?)(?P["\'])%s(?P=quote)(?P=delim)zF(?:^|\n)(?P["\'])%s(?P=quote)(?P[^\w\n"\'])(?P ?)zF(?P[^\w\n"\'])(?P ?)(?P["\'])%s(?P=quote)(?:$|\n)z,(?:^|\n)(?P["\'])%s(?P=quote)(?:$|\n))rFNrrÚquoteéÚdelimNÚspace©rZr=rFzg(?:(?<=%(delim)s)|^)%(space)s%(quote)s((?:%(quote)s%(quote)s|[^%(quote)s]++)*+)%(quote)s(?:%(delim)s|$)rz *+)r�rŽr‘éc3ó,•K—|]}‰|dvV—ŒdS©r�Nr5)rlÚmÚ dquotechars €r!rrz5Sniffer._guess_quote_and_delimiter..sHøèè€ðAðAØ"#ð)¨A¨a¬DÐ0ðAðAðAðAðAðAr#) ÚreÚcompileÚDOTALLÚ MULTILINEÚfindallÚ groupindexrpÚKeyErrorÚmaxÚescapeÚanyÚfinditer)r Údatar‹ÚbodyÚmatchesÚrestrÚregexpÚquotesÚdelimsÚspacesr�r–ÚnrZr/r�r2r1Ú dq_regexpr—s @r!rˆz"Sniffer._guess_quote_and_delimiterÎs´ø€ð6ˆØˆðGð ð ˆEõ”Z ¨¡ ­b¬i½"¼,Ñ.FÑGÔGˆFØ—n’n TÑ*Ô*ˆGØð Ø�ð ðð (à'Ð'؈؈؈ØÔ&ˆ Øð ð ˆAؘ7Ô# aÑ'ˆAØ�A”$ˆCØð 5Ø$Ÿjšj¨¨aÑ0Ô0°1Ñ4��s‘ ð Ø˜wÔ'¨!Ñ+�ؘ”d��øÝð ð ð Ø�ð øøøàð 5˜ Ð*¨c°ZÐ.?Ð.?Ø$Ÿjšj¨¨aÑ0Ô0°1Ñ4��s‘ ð Ø˜wÔ'¨!Ñ+��øÝð ð ð Ø�ð øøøà�Œtð Ø˜!‘ �øå˜ F¤JÐ/Ñ/Ô/ˆ à ð !ݘ F¤JÐ/Ñ/Ô/ˆEØ% eœ}°Ò6РؘŠ}ˆ}Ø�øðˆEØ Ð ð ˆ Ø ð AÝœ ð0õ!#¤ ¨%Ñ 0Ô 0¸9à).°#ª¨  ¸2ð?ð?ñ?õ ”Lñ"ô"ˆIð# Q™ˆJÝðAðAðAðAØ'0×'9Ò'9¸$Ñ'?Ô'?ðAñAôAñAôAˆKð˜;¨Ð/?Ð@Ð@s$ÂB.Â. B;Â:B;Ã# C/Ã/ C<Ã;C<có.—ttd| d¦«¦«¦«}d„td¦«D¦«}t dt |¦«¦«}d}i}i}i}d|} } | t |¦«k�r™|dz }|| | …D]S} |D]N} | | i¦«} |  | ¦«}|  |d¦«dz| |<| || <ŒOŒT| ¦«D]×} t||   ¦«¦«}t |¦«dkr|dddkrŒOt |¦«dkrjt|d„¬ ¦«|| <|  || ¦«|| d|| dtd „|D¦«¦«z f|| <ŒÌ|d|| <ŒØ|  ¦«}tt ||zt |¦«¦«¦«}d }d }t |¦«dkr^||krX|D]7\}}|ddkr&|ddkr|d|z |kr |�||vr|||<Œ8|d z}t |¦«dkr||k°Xt |¦«dkrft| ¦«¦«d}|d |¦«|d d|z¦«k}||fS| } | |z } | t |¦«k�°™|sdSt |¦«dkra|jD]Y}|| ¦«vrA|d |¦«|d d|z¦«k}||fcSŒZd„|  ¦«D¦«}| ¦«|dd}|d |¦«|d d|z¦«k}||fS)a½ The delimiter /should/ occur the same number of times on each row. However, due to malformed data, it may not. We don't want an all or nothing approach, so we allow for small variations in this number. 1) build a table of the frequency of each character on every line. 2) build a table of frequencies of this frequency (meta-frequency?), e.g. 'x occurred 5 times in 10 rows, 6 times in 1000 rows, 7 times in 2 rows' 3) use the mode of the meta-frequency to determine the /expected/ frequency for that character 4) find out how often the character actually meets that goal 5) the character that best meets its goal is the delimiter For performance reasons, the data is evaluated in chunks, so it can try and evaluate the smallest portion of the data possible, evaluating additional chunks as necessary. Nr=có,—g|]}t|¦«‘ŒSr5)Úchr)rlÚcs r!rnz,Sniffer._guess_delimiter..7s€Ð,Ð,Ð,˜A•�Q‘”Ð,Ð,Ð,r#éé rr�có—|dS)Nr�r5)rms r!úz*Sniffer._guess_delimiter..Qs €¸1¸Q¼4€r#r’c3ó&K—|] }|dV—Œ dSr•r5)rlÚitems r!rrz+Sniffer._guess_delimiter..Vs&èè€Ð(CÐ(C°T¨¨a¬Ð(CÐ(CÐ(CÐ(CÐ(CÐ(Cr#gð?gÍÌÌÌÌÌì?g{®Gáz„?z%c )rrcó—g|] \}}||f‘Œ Sr5r5)rlÚkÚvs r!rnz,Sniffer._guess_delimiter..€s €Ð3Ð3Ð3™5˜A˜a�!�A�Ð3Ð3Ð3r#éÿÿÿÿ)ÚlistÚfilterÚsplitÚrangeÚminrUrpÚcountrsÚitemsrŸÚremoveÚsumÚfloatr�Úsort)r r£r‹ÚasciiÚ chunkLengthÚ iterationÚ charFrequencyÚmodesr©ÚstartÚendÚlineÚcharÚ metaFrequencyÚfreqrÁÚmodeListÚtotalÚ consistencyÚ thresholdr¸r¹r�r2rWs r!r‰zSniffer._guess_delimiter"sf€õ&•F˜4 §¢¨DÑ!1Ô!1Ñ2Ô2Ñ3Ô3ˆà,Ð,¥ s¡¤Ð,Ñ,Ô,ˆõ˜"�c $™iœiÑ(Ô(ˆ ؈ ؈ ؈؈ؘ ˆsˆØ•c˜$‘i”iÒÑØ ˜‰NˆIؘU 3˜Yœð 8ð 8�Ø!ð8ð8�DØ$1×$5Ò$5°d¸BÑ$?Ô$?�MàŸ:š: dÑ+Ô+�Dà*7×*;Ò*;¸DÀ!Ñ*DÔ*DÀqÑ*H�M $Ñ'Ø*7�M $Ñ'Ð'ð 8ð&×*Ò*Ñ,Ô,ð +ð +�ݘ]¨4Ô0×6Ò6Ñ8Ô8Ñ9Ô9�Ý�u‘:”: ’?�? u¨Q¤x°¤{°aÒ'7Ð'7Øå�u‘:”: ’>�>Ý"% e°°Ð"@Ñ"@Ô"@�E˜$‘Kð—L’L  t¤Ñ-Ô-Ð-Ø#(¨¤;¨q¤>°5¸´;¸q´>Ý%(Ð(CÐ(C¸UÐ(CÑ(CÔ(CÑ%CÔ%Cñ4Dð#E�E˜$‘K�Kð#(¨¤(�E˜$‘K�Kð—{’{‘}”}ˆHÝ�#˜k¨IÑ5µs¸4±y´yÑAÔAÑBÔBˆEàˆKàˆIÝ�f‘+”+ Ò"Ð" {°iÒ'?Ð'?Ø$ð*ð*‘D�A�qؘ”t˜a’x�x A a¤D¨1¢H HؘqœT %™Z¨KÒ7Ð7Ø'Ð/°1¸ °?°?Ø()˜F 1™IøØ˜tÑ#� õ �f‘+”+ Ò"Ð" {°iÒ'?Ð'?õ�6‰{Œ{˜aÒÐݘVŸ[š[™]œ]Ñ+Ô+¨AÔ.�Ø$(¨¤G§M¢M°%Ñ$8Ô$8Ø$(¨¤G§M¢M°%¸%±-Ñ$@Ô$@ò%AÐ àÐ/Ð0Ð0ðˆEØ �;Ñ ˆCðc•c˜$‘i”iÒÑðfð Ø�7õ ˆv‰;Œ;˜Š?ˆ?Ø”^ð 1ð 1�ؘŸ š ™ œ Ð%Ð%Ø(,¨Q¬¯ ª °aÑ(8Ô(8Ø(,¨Q¬¯ ª °e¸a±iÑ(@Ô(@ò)AÐ$àÐ/Ð0Ð0Ð0Ð0ð&ð4Ð3 F§L¢L¡N¤NÐ3Ñ3Ô3ˆØ � Š ‰ Œ ˆ Ø�b” ˜!” ˆà  œGŸMšM¨%Ñ0Ô0Ø  œGŸMšM¨%°%©-Ñ8Ô8ò9ÐàÐ'Ð(Ð(r#cób—tt|¦«| |¦«¦«}t|¦«}t |¦«}i}t |¦«D]}d||<Œd}|D]ª}|dkrn¡|dz }t |¦«|krŒ#t | ¦«¦«D]e} t} | || ¦«n,#ttf$rt || ¦«} YnwxYw| || kr|| €| || <Œb|| =ŒfŒ«d} |  ¦«D]}\} } t| ¦«td¦«kr%t || ¦«| kr| dz } ŒD| dz} ŒJ | || ¦«| dz} Œb#ttf$r| dz } YŒzwxYw| dkS)Nrér�)rrrŒrNrUr¾r»rsÚcomplexrcÚ OverflowErrorrÁÚtyper') r rŠÚrdrrgÚcolumnsÚ columnTypesÚiÚcheckedrVÚcolÚthisTypeÚ hasHeaderÚcolTypes r!Ú has_headerzSniffer.has_header‰s€õ•X˜fÑ%Ô% t§z¢z°&Ñ'9Ô'9Ñ:Ô:ˆå�c‘”ˆå�f‘+”+ˆØˆ Ý�w‘”Ð6Ð6ˆA°$ ¨Q¡ àˆØð -ð -ˆCà˜Š|ˆ|Ø�Ø �q‰LˆGå�3‰xŒx˜7Ò"Ð"Øå˜K×,Ò,Ñ.Ô.Ñ/Ô/ð -ð -�Ý"�ð-Ø�H˜S œXÑ&Ô&Ð&Ð&øÝ"¥MÐ2ð-ð-ð-å" 3 s¤8™}œ}�H�H�Hð-øøøð˜{¨3Ô/Ò/Ð/Ø" 3Ô'Ð/Ø+3˜  CÑ(Ð(ð(¨Ð,øð -ð$ˆ Ø'×-Ò-Ñ/Ô/ð #ð #‰LˆC�Ý�G‰}Œ}¥ Q¡¤Ò'Ð'Ý�v˜c”{Ñ#Ô# wÒ.Ð.Ø ‘N�I�Ià ‘N�I�Ið#Ø�G˜F 3œKÑ(Ô(Ð(ð ‘N�I�Iøõ#¥IÐ.ð#ð#ð#Ø ‘N�I�I�Ið#øøøð ˜1Š}Ðs$Â:C à &C5Ã4C5Å8FÆF(Æ'F(r%) r*r+r,rr"rŒrˆr‰rãr5r#r!rr¥sy€€€€€ððð4ð4ð4ð ðððð>QAðQAðQAðhd)ðd)ðd)ðN=ð=ð=ð=ð=r#r)rr˜Ú_csvrrrrrrr r r r r rrrr&ÚiorÚ__all__rrrrrr×Ú NameErrorrÄrr5r#r!úrès›ðððð € € € ððððððððððððððððððððððððððððððððð %Ð$Ð$Ð$Ð$Ð$àÐÐÐÐÐð ð ð €ð ð ð ð ð ñ ô ð ð>ððððˆGñôððÐ�˜%Ñ Ô Ð ððððð�ñôððÐ�˜iÑ(Ô(Ð(ððððð�7ñôððÐ�˜Ñ&Ô&Ð&ð/ð/ð/ð/ð/ñ/ô/ð/ðdHðHðHðHðHñHôHðHð<Ø €G€GøØðððØ€G€G€GðøøøðaðaðaðaðañaôaðaðaðasÂ-B0Â0B:Â9B: