grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026+ c&èAú_…èãó>€Rt^RIt^RIHtHtHtHtHtHtH t H t H t H t H t HtHtHt^RIHt^RIHt.ROtR t!R R4t!RR]4t]!R]4!RR]4t]!R]4!RR ]4t]!R]4!RR 4t!RR 4t!RR4tR#)a) CSV parsing and writing. This module provides classes that assist in the reading and writing of Comma Separated Value (CSV) files, and implements the interface described by PEP 305. Although many CSV files are simple to parse, the format is not formally defined by a stable specification and is subtle enough that parsing lines of a CSV file with something like line.split(",") is bound to fail. The module supports three basic APIs: reading, writing, and registration of dialects. DIALECT REGISTRATION: Readers and writers support a dialect argument, which is a convenient handle on a group of settings. When the dialect argument is a string, it identifies one of the dialects previously registered with the module. If it is a class or instance, the attributes of the argument are used as the settings for the reader or writer: class excel: delimiter = ',' quotechar = '"' escapechar = None doublequote = True skipinitialspace = False lineterminator = '\r\n' quoting = QUOTE_MINIMAL SETTINGS: * quotechar - specifies a one-character string to use as the quoting character. It defaults to '"'. * delimiter - specifies a one-character string to use as the field separator. It defaults to ','. * skipinitialspace - specifies how to interpret spaces which immediately follow a delimiter. It defaults to False, which means that spaces immediately following a delimiter is part of the following field. * lineterminator - specifies the character sequence which should terminate rows. * quoting - controls when quotes should be generated by the writer. It can take on any of the following module constants: csv.QUOTE_MINIMAL means only when required, for example, when a field contains either the quotechar or the delimiter csv.QUOTE_ALL means that quotes are always placed around fields. csv.QUOTE_NONNUMERIC means that quotes are always placed around fields which do not parse as integers or floating-point numbers. csv.QUOTE_STRINGS means that quotes are always placed around fields which are strings. Note that the Python value None is not a string. csv.QUOTE_NOTNULL means that quotes are only placed around fields that are not the Python value None. csv.QUOTE_NONE means that quotes are never placed around fields. * escapechar - specifies a one-character string used to escape the delimiter when quoting is set to QUOTE_NONE. * doublequote - controls the handling of quotes inside fields. When True, two consecutive quotes are interpreted as one during read, and when writing, each quote character embedded in the data is written as two quotes N)ÚErrorÚwriterÚreaderÚregister_dialectÚunregister_dialectÚ get_dialectÚ list_dialectsÚfield_size_limitÚ QUOTE_MINIMALÚ QUOTE_ALLÚQUOTE_NONNUMERICÚ QUOTE_NONEÚ QUOTE_STRINGSÚ QUOTE_NOTNULL)ÚDialect)ÚStringIOrÚexcelÚ excel_tabÚSnifferÚ DictReaderÚ DictWriterÚ unix_dialectz1.0cóTa€]tRt^WtoRtRtRtRtRtRt Rt Rt Rt Rt RtRtRtVtR#)rz´Describe a CSV dialect. This must be subclassed (see csv.excel). Valid attributes are: delimiter, quotechar, escapechar, doublequote, skipinitialspace, lineterminator, quoting. ÚFNcó^€VP\8wdRVnVP4R#)TN)Ú __class__rÚ_validÚ _validate©Úselfs&Ú*/opt/alt/python314/lib64/python3.14/csv.pyÚ__init__ÚDialect.__init__js€Ø �>‰>œWÔ $؈DŒKØ �‰Öócón€\V4R# \dp\\T44RhRp?ii;i©N)Ú_DialectÚ TypeErrorrÚstr)rÚes& r rÚDialect._validateos.€ð *Ü �TŽNøÜô *䜘A›“- TÐ )ûð *ús‚ � 4š/¯4)r)Ú__name__Ú __module__Ú __qualname__Ú__firstlineno__Ú__doc__Ú_namerÚ delimiterÚ quotecharÚ escapecharÚ doublequoteÚskipinitialspaceÚlineterminatorÚquotingr!rÚ__static_attributes__Ú__classdictcell__©Ú __classdict__s@r rrWsIø‡€ñð €EØ €Fà€IØ€IØ€JØ€KØÐØ€NØ€Gò÷ *ð*r#có2€]tRt^vtRtRtRtRtRtRt ] t Rt R#) rz;Describe the usual properties of Excel-generated CSV files.Ú,Ú"TFú ©N) r+r,r-r.r/r1r2r4r5r6r r7r8r@r#r rrvs$†ÙEØ€IØ€IØ€KØÐØ€NØ„Gr#có€]tRt^€tRtRtRtR#)rzEDescribe the usual properties of Excel-generated TAB-delimited files.Ú r@N)r+r,r-r.r/r1r8r@r#r rr€s †ÙOØ„Ir#z excel-tabcó2€]tRt^…tRtRtRtRtRtRt ] t Rt R#) rz:Describe the usual properties of Unix-generated CSV files.r=r>TFÚ r@N) r+r,r-r.r/r1r2r4r5r6r r7r8r@r#r rr…s$†ÙDØ€IØ€IØ€KØÐØ€NØ„Gr#ÚunixcóŽa€]tRt^�toRRltRt]R4t]PR4tRt ] !] P4t RtVtR#) rNcó¨€Ve\V4VJd \V4pW nW0nW@n\ W.VO5/VBVnWPn^VnR#r%)ÚiterÚlistÚ _fieldnamesÚrestkeyÚrestvalrÚdialectÚline_num)rÚfÚ fieldnamesrKrLrMÚargsÚkwdss&&&&&&*,r r!ÚDictReader.__init__‘sP€à Ò !¤d¨:Ó&6¸*Ó&DܘjÓ)ˆJØ%ÔØŒ ØŒ ܘQÐ7¨$Ò7°$Ñ7ˆŒ ØŒ ØˆŽ r#có€V#r%r@rs&r Ú__iter__ÚDictReader.__iter__œs€Øˆ r#cóÄ€VPf\VP4VnVPPVnVP# \dL4i;ir%)rJÚnextrÚ StopIterationrNrs&r rPÚDictReader.fieldnamesŸsW€à × Ñ Ò #ð Ü#'¨¯ © Ó#4�Ô ðŸ ™ ×,Ñ,ˆŒ Ø×ÑÐøô!ô Ùð ús�AÁ AÁAcó€WnR#r%)rJ)rÚvalues&&r rPrZ©s€à Ör#cóÞ€VP^8Xd VP\VP4pVPPVnV.8Xd\VP4pK\ \ VPV44p\ VP4p\ V4pW48dWRW P&V#W48”d%VPVRFpVPW%&K V#)éN) rNrPrXrÚdictÚzipÚlenrKrL)rÚrowÚdÚlfÚlrÚkeys& r Ú__next__ÚDictReader.__next__­s¾€Ø �=‰=˜AÔ à �OŠOÜ�4—;‘;ӈ؟ ™ ×,Ñ,ˆŒ ð �RŒiÜ�t—{‘{Ó#ŠCÜ ”�T—_‘_ cÓ*Ó +ˆÜ �—‘Ó !ˆÜ �‹XˆØ Œ7Ø! #˜hˆA�l‰l‰OðˆðŒWØ—‘ r sÓ+�ØŸ™�“ñ,àˆr#)rJrMrNrrKrL)NNNr)r+r,r-r.r!rUÚpropertyrPÚsetterrgÚ classmethodÚtypesÚ GenericAliasÚ__class_getitem__r8r9r:s@r rr�sUø‡€ô òðñ óð ð×Ññ!óð!òñ,$ E×$6Ñ$6Ó7Ör#cófa€]tRt^ÆtoRRltRtRtRtRt] !] P4t Rt VtR#) rcóà€Ve\V4VJd \V4pW nW0nVP 4pVR9d\ RV,4hW@n\W.VO5/VBVnR#)Nz-extrasaction (%s) must be 'raise' or 'ignore')ÚraiseÚignore)rHrIrPrLÚlowerÚ ValueErrorÚ extrasactionr)rrOrPrLrurMrQrRs&&&&&&*,r r!ÚDictWriter.__init__Çss€à Ò !¤d¨:Ó&6¸*Ó&DܘjÓ)ˆJØ$ŒØŒ Ø#×)Ñ)Ó+ˆ Ø Ð2Ô 2ÜÐLØ+õ,ó-ð -à(ÔܘQÐ7¨$Ò7°$Ñ7ˆŽ r#cóv€\\VPVP44pVPV4#r%)r_r`rPÚwriterow)rÚheaders& r Ú writeheaderÚDictWriter.writeheaderÔs*€Ü”c˜$Ÿ/™/¨4¯?©?Ó;Ó<ˆØ�}‰}˜VÓ$Ð$r#c ó&aa€SPR8XddSP4SP, pV'd;\RRP VUu.uFp\ V4NK up4,4hVV3RlSP4#uupi)rqz(dict contains fields not in fieldnames: z, c3ó\<"€TF!pSPVSP4x€K# R#5ir%)ÚgetrL)Ú.0rfÚrowdictrs& €€r Ú Ú+DictWriter._dict_to_list..Þs#øé€ÐJ¹/°3�— ‘ ˜C §¡×.Ð.»/ùsƒ),)ruÚkeysrPrtÚjoinÚrepr)rr€Ú wrong_fieldsÚxsff r Ú _dict_to_listÚDictWriter._dict_to_listØstù€Ø × Ñ  Ô 'Ø"Ÿ<™<›>¨D¯O©OÕ;ˆLßÜ Ð!KØ#'§9¡9¹|Ó-L¹|¸!¬d°1®g¹|Ñ-LÓ#Mõ"NóOðOåJ¸$¿/º/ÓJÐJùò.MsÁBcóV€VPPVPV44#r%)rrxrˆ)rr€s&&r rxÚDictWriter.writerowàs"€Ø�{‰{×#Ñ# D×$6Ñ$6°wÓ$?Ó@Ð@r#có`€VPP\VPV44#r%)rÚ writerowsÚmaprˆ)rÚrowdictss&&r r�ÚDictWriter.writerowsãs$€Ø�{‰{×$Ñ$¤S¨×);Ñ);¸XÓ%FÓGÐGr#)rurPrLrN)rrqr)r+r,r-r.r!rzrˆrxr�rkrlrmrnr8r9r:s@r rrÆs4ø‡€ô 8ò%òKòAòHñ$ E×$6Ñ$6Ó7Ör#cóFa€]tRt^étoRtRtR RltRtRtRt Rt Vt R#) rzY "Sniffs" the format of a CSV file (i.e. delimiter, quotechar) Returns a Dialect object. có€.ROVnR#)r=N)r=rBÚ;Ú Ú:©Ú preferredrs&r r!ÚSniffer.__init__îs €â3ˆŽr#Nc ó4€VPRR4PRR4pVPW4wr4rVV'gVPVV4wrVV'g \R4h!RR\4pWGnWWnT;'gRVnWgnV#)zê Returns a dialect (or None) corresponding to the sample If several delimiters fit the sample equally well, the delimiters listed in the preferred attribute are preferred, in that order, no matter how many times each of them occurs. r?rDÚ zCould not determine delimitercó"€]tRtRtRtRt]tRtR#)ÚSniffer.sniff..dialectiÚsniffedr?r@N) r+r,r-r.r0r6r r7r8r@r#r rMrœs†ØˆEØ#ˆNØ#ŒGr#rMr>) ÚreplaceÚ_guess_quote_and_delimiterÚ_guess_delimiterrrr4r1r2r5)rÚsampleÚ delimitersr2r4r1r5rMs&&& r ÚsniffÚ Sniffer.sniffósœ€ð—‘ ¨Ó-×5Ñ5°d¸DÓAˆð×2Ñ2°6ÓFñ <ˆ   çØ*.×*?Ñ*?ÀØ@Jó+LÑ 'ˆI÷ÜÐ7Ó8Ð 8ô $”gô $ð *ÔØ%Ôà%×,Ð,¨ˆÔØ#3Ô àˆr#c  ó®a€^RIpRp.pRFQpVPWd,VPVP,4pVP V4pV'gKQM V'gR#/p/p ^p XP p VF®p V R,^, p WÍ,pV'dVP V^4^,WŽ&V R,^, p WÍ,pT'd&TeYâ9dT P T^4^,Yž&T R,^, p YÍ,'gK¥T ^, p K° \WˆP R7pV 'd-\W™P R7pV V,V 8HpVR 8XdRpMRp^pRpV'd£TPR RVPV4RTRVR 8wdR MR/,VP4pV^,o\;QJd.V3R lVPV44F 'gK RM# RM!V3R lVPV444pVVVV3# \dEKÁi;i \dEKÔi;i)aG 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. Nz#(?:(?P=quote){2}|(?!(?P=quote)).)*+rFÚquoteÚdelimÚspace©rfrDzg(?:(?<=%(delim)s)|^)%(space)s%(quote)s((?:%(quote)s%(quote)s|[^%(quote)s]++)*+)%(quote)s(?:%(delim)s|$)r”z *+c3ó<<"€TFpSV^,9x€K R#5i©éNr@)rÚmÚ dquotechars& €r r�Ú5Sniffer._guess_quote_and_delimiter..es"øé€ðAÙ'? !ð)¨A¨a­DÖ0Û'?ùsƒT)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))rFNr^) ÚreÚcompileÚDOTALLÚ MULTILINEÚfindallÚ groupindexr~ÚKeyErrorÚmaxÚescapeÚanyÚfinditer)rÚdatar¢r°ÚbodyÚmatchesÚrestrÚregexpÚquotesÚdelimsÚspacesrµr­Únrfr2r§r5r4Ú dq_regexpr®s&&& @r rŸÚ"Sniffer._guess_quote_and_delimitersFø€ó ð 6ˆØˆóGˆEð—Z‘Z ¥ ¨b¯i©i¸"¿,¹,Õ.FÓGˆFØ—n‘n TÓ*ˆG߉wÙñG÷à'Ð '؈؈؈Ø×&Ñ&ˆ ÛˆAؘ7Õ# aÕ'ˆAØ•$ˆCߨ$Ÿj™j¨¨aÓ0°1Õ4�‘ ð Ø˜wÕ'¨!Õ+�Ø•d�÷˜ Ò*¨cÔ.?Ø$Ÿj™j¨¨aÓ0°1Õ4�‘ ð Ø˜wÕ'¨!Õ+�ð�tŽtؘ!• ’ñ#ô&˜§J¡JÔ/ˆ ç ܘ§J¡JÔ/ˆEØ% e�}°Ñ6РؘŒ}Ø�øðˆEØ Ð ð ˆ ß ØŸ ™ ð0ð § ¡ ¨%Ó 0°'¸9ਰ#¬¡¸2ð?õ?ð —L‘Ló"ˆIð# Q�ˆJß›#ôAØ'0×'9Ñ'9¸$Ô'?óAŸ#Ÿ#š#ôAØ'0×'9Ñ'9¸$Ô'?óAóAˆKð˜;¨Ð/?Ð@Ð@øôQô Ûð ûô ô Ûð ús$Â>H1ÄIÈ1 IÉIÉ IÉIc óÊ€\\RVPR444p\^4Uu.uFp\ V4NK pp\ ^ \ V44p^p/p/p/p ^TrºV \ V48Ed`V^, pWV FNp VFEp VPV /4pV PV 4pVPV^4^,Wï&WçV &KG KP VP4FÄp \W},P44p\ V4^8XdV^,^,^8XdKI\ V4^8”da\VRR7W�&VPW�,4W�,^,W�,^,\RV44, 3W�&K¹V^,W�&KÆ VP4p\\ WV,\ V444pRpRp\ V 4^8XdhVV8¼daVFOwppV^,^8”gKV^,^8”gK&V^,V, V8¼gK=Ve VV9gKJVV V&KQ VR,pKw\ V 4^8Xd]\V P44^,pV^,PV4V^,PR V,48HpVV3#T p Wµ, p EKpV 'gR #\ V 4^8”dgVPFVpVV P49gKV^,PV4V^,PR V,48HpVV3u# V P4UUu.uF wppVV3NK pppVP!4VR ,^,pV^,PV4V^,PR V,48HpVV3#uupiuuppi) 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. NrDcó€V^,#)r¬r@)r‡s&r ÚÚ*Sniffer._guess_delimiter..šs€¸1¸Q¾4r#r©c3ó2"€TF q^,x€K R#5ir«r@)rÚitems& r r�Ú+Sniffer._guess_delimiter..Ÿsé€Ð(C¹U°T¨a¯ª»Uùs‚gð?gÍÌÌÌÌÌì?g{®Gáz„?z%c )rr^éÿÿÿÿ)rIÚfilterÚsplitÚrangeÚchrÚminrar~ÚcountrƒÚitemsr·ÚremoveÚsumÚfloatr—Úsort)rr»r¢ÚcÚasciiÚ chunkLengthÚ iterationÚ charFrequencyÚmodesrÁÚstartÚendÚlineÚcharÚ metaFrequencyÚfreqrÔÚmodeListÚtotalÚ consistencyÚ thresholdÚkÚvr§r5rcs&&& r r ÚSniffer._guess_delimiterksj€ô&”F˜4 §¡¨DÓ!1Ó2Ó3ˆä!& s¤Ó,¡˜A”�Q–¡ˆÐ,ô˜"œc $›iÓ(ˆ ؈ ؈ ؈؈ؘ ˆsØ”c˜$“iÕØ ˜�NˆIØ 3›�Û!�DØ$1×$5Ñ$5°d¸BÓ$?�MàŸ:™: dÓ+�Dà*7×*;Ñ*;¸DÀ!Ó*DÀqÕ*H�MÑ'Ø*7 $Ó'ó "ñ(ð&×*Ñ*Ö,�ܘ]Õ0×6Ñ6Ó8Ó9�Ü�u“: ”? u¨Q¥x°¥{°aÔ'7Ùä�u“: ”>Ü"% e±Ô"@�E‘Kð—L‘L ¥Ô-Ø#(¥;¨q¥>°5µ;¸qµ>Ü%(Ñ(C¹UÓ(CÓ%Cõ4Dð#E�E“Kð#(¨¥(�E“Kñ-ð —{‘{“}ˆHÜœ#˜kÕ5´s¸4³yÓAÓBˆEàˆKàˆIÜ�f“+ Ô" {°iÔ'?Û$‘D�A�qؘ•t˜a–x A a¥D¨1¦Hؘq�T %�Z¨KÖ7Ø'Ò/°1¸ ¶?Ø()˜F 1›Iñ %ð ˜tÕ#’ ä�6‹{˜aÔܘVŸ[™[›]Ó+¨AÕ.�Ø$(¨¥G§M¡M°%Ó$8Ø$(¨¥G§M¡M°%¸%µ-Ó$@ñ%AÐ àÐ/Ð0Ð0ðˆEØ Õ ‹CçØˆNô ˆv‹;˜Œ?Ø—^”^�ؘŸ ™ › Ö%Ø(,¨Q­¯ © °aÓ(8Ø(,¨Q­¯ © °e¸aµiÓ(@ñ)AÐ$àÐ/Ð0Ò0ñ $ð%+§L¡L¤NÔ3¡N™5˜A˜a�!�A“¡NˆÑ3Ø � ‰ Œ Ø�b• ˜!• ˆà  �GŸM™M¨%Ó0Ø  �GŸM™M¨%°%­-Ó8ñ9ÐàÐ'Ð(Ð(ùò_-ùóR4s ²OÍ+Ocó6€\\V4VPV44p\V4p\ V4p/p\ V4FpRWV&K ^pVF}pV^8”dMuV^, p\ V4V8wdK'\ VP44F9p \p V !W‰,4W¥V ,8wgK'WY,fW¥V &K7WYK; K ^p VP4F_wrœ\V \4'd-\ W9,4V 8wd V ^, p K<V ^,p KGV !W9,4V ^,p Ka V ^8„# \\3d\ Y‰,4p LÇi;i \\3dT ^, p K­i;ir%)rrr£rXrarÐrIrƒÚcomplexrtÚ OverflowErrorrÔÚ isinstanceÚintr') rr¡ÚrdrryÚcolumnsÚ columnTypesÚiÚcheckedrbÚcolÚthisTypeÚ hasHeaderÚcolTypes && r Ú has_headerÚSniffer.has_headerÒsx€ô”X˜fÓ% t§z¡z°&Ó'9Ó:ˆä�c“ˆä�f“+ˆØˆ Ü�w–ˆA°$ £‘àˆÛˆCà˜Œ|ÙØ �q�LˆGä�3‹x˜7Ô"Ùä˜K×,Ñ,Ó.Ö/�Ü"�ð-Ù˜S�XÔ&ð ¨3Õ/Ö/Ø"Õ'Ò/Ø+3 CÓ(ð(Ò,ó0ñð6ˆ Ø'×-Ñ-Ö/‰LˆCܘ'¤3×'Ò'Ü�v•{Ó# wÔ.Ø •N’Ià •N’Ið#Ù˜F�KÔ(ð •N’Iñ0ð˜1‰}Ðøô;#¤MÐ2ô-ä" 3¥8›}’Hð-ûô0#¤IÐ.ô#Ø •N“Ið#ús$Â!EÄ2E:Å"E7Å6E7Å:FÆFr–r%) r+r,r-r.r/r!r£rŸr rúr8r9r:s@r rrés.ø‡€ñò4ô òFRAòjd)÷N=ð=r#)r r r r rrrrrrr rrrrrrrrrr)r/rlÚ_csvrrrrrrrr r r r r rrrr&ÚiorÚ__all__Ú __version__rrrrrrr@r#r Úrs®ðñ>ó@ ÷.÷.÷.÷.õ %åò €ð€ ÷*ñ*ô>ˆGôñ�˜%Ô ô�ôñ�˜iÔ(ô�7ôñ�˜Ô&÷38ñ38÷l 8ñ 8÷Ffófr#