<div dir="ltr"><div>Buongiorno a tutti, ho la seguente esigenza: parsare un file ldif prodotto dall'esportazione di una rubrica di Thunderbird.</div><div><br></div><div>Prendiamo questo ldif come esempio:</div><div>---<br></div><div>dn: cn=Mario Rossi,mail=<a href="mailto:mario.rossi@domain.com">mario.rossi@domain.com</a><br>objectclass: top<br>objectclass: person<br>objectclass: organizationalPerson<br>objectclass: inetOrgPerson<br>objectclass: mozillaAbPersonAlpha<br>givenName: Mario Rossi<br>cn: Mario Rossi<br>mail: <a href="mailto:mario.rossi@domain.com">mario.rossi@domain.com</a><br>modifytimestamp: 1632815299</div><div>---</div><div><br></div><div>E il codice necessario per fare il parsing:</div><div>---</div><div>#!/usr/bin/env python3<br><br>import sys<br>from ldif3 import LDIFParser<br><br>ldif_path = sys.argv[1]<br><br>with open(ldif_path, 'rb') as ldif_file:<br>    parser = LDIFParser(ldif_file)<br><br>    for dn, entry in parser.parse():<br>        print(dn, entry['cn'])</div><div>---</div><div><br></div><div>Funziona perfettamente fino a che non trovi un contatto che una virgola nel CN.<br></div><div>Esempio di ldif problematico:</div><div>---</div><div>dn: cn=Mario, Rossi,mail=<a href="mailto:mario.rossi@domain.com">mario.rossi@domain.com</a><br>objectclass: top<br>objectclass: person<br>objectclass: organizationalPerson<br>objectclass: inetOrgPerson<br>objectclass: mozillaAbPersonAlpha<br>givenName: Mario Rossi<br>cn: Mario, Rossi<br>mail: <a href="mailto:mario.rossi@domain.com">mario.rossi@domain.com</a><br>modifytimestamp: 1632815299</div><div>---</div><div><br></div><div>Errore che si ottiene:</div><div>---</div><div>Traceback (most recent call last):<br>  File "./simple.py", line 11, in <module><br>    for dn, entry in parser.parse():<br>  File "/usr/local/lib/python3.8/dist-packages/ldif3.py", line 384, in parse<br>    yield self._parse_entry_record(block)<br>  File "/usr/local/lib/python3.8/dist-packages/ldif3.py", line 360, in _parse_entry_record<br>    self._check_dn(dn, attr_value)<br>  File "/usr/local/lib/python3.8/dist-packages/ldif3.py", line 339, in _check_dn<br>    self._error('No valid string-representation of '<br>  File "/usr/local/lib/python3.8/dist-packages/ldif3.py", line 330, in _error<br>    raise ValueError(msg)<br>ValueError: No valid string-representation of distinguished name cn=Mario, Rossi,mail=<a href="mailto:mario.rossi@domain.com">mario.rossi@domain.com</a>.<br>---<br><br></div><div>Nota: il CN a volte è espresso come base64 e al suo interno ci può essere una virgola che rompe la sintassi.</div><div><br></div><div><b>E' possibile "ignorare" i valori errati con un try?</b> Come applicarlo al ciclo?<br><a href="https://stackoverflow.com/questions/39889811/python-ldif3-parser-and-exception-in-for-loop">https://stackoverflow.com/questions/39889811/python-ldif3-parser-and-exception-in-for-loop</a></div><div><br></div><div>Ogni suggerimento è ben accetto :-)<br></div><div><br></div><div><br></div></div>