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