Per commercialisti e studi
Come rinominare automaticamente le fatture XML con fornitore e data
Aggiornato il · Redazione ApriFattura
Per rinominare automaticamente le fatture XML con fornitore e data bisogna leggere da ogni file la denominazione (o nome e cognome) del CedentePrestatore e i campi Data e Numero di DatiGeneraliDocumento. Lo script Python qui sotto, basato su xml.etree.ElementTree e indipendente dai prefissi di namespace, rinomina i file in AAAA-MM-GG_Fornitore_Numero.xml; il piano Studio di ApriFattura fa lo stesso senza script.
| Parte del nome | Campo FatturaPA |
|---|---|
| AAAA-MM-GG | FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/Data |
| Fornitore | CedentePrestatore/DatiAnagrafici/Anagrafica/Denominazione oppure Nome + Cognome |
| Numero | DatiGeneraliDocumento/Numero (caratteri non validi sostituiti da -) |
Lo script
Funziona con Python 3 senza librerie esterne. Salta i file .p7m (vanno prima estratti, vedi estrarre i p7m) e i file dei metadati SdI (_MT_). Con --prova mostra i nuovi nomi senza rinominare. Puoi anche scaricarlo.
#!/usr/bin/env python3
"""Rinomina le fatture elettroniche XML come AAAA-MM-GG_Fornitore_Numero.xml.
Uso: python3 rinomina_fatture.py /percorso/cartella [--prova]
"""
import re
import sys
import xml.etree.ElementTree as ET
from pathlib import Path
def locale(tag):
return tag.rsplit("}", 1)[-1]
def trova(el, *nomi):
"""Primo discendente che segue il percorso di nomi locali (ignora i namespace)."""
for nome in nomi:
el = next((c for c in el.iter() if c is not el and locale(c.tag) == nome), None)
if el is None:
return None
return el
def testo(el, *nomi):
t = trova(el, *nomi) if el is not None else None
return t.text.strip() if t is not None and t.text else ""
def pulisci(s, maxlen=60):
s = re.sub(r'[\\/:*?"<>|\s]+', "-", s).strip("-.")
return s[:maxlen] or "senza-nome"
def nuovo_nome(file):
root = ET.parse(file).getroot()
cedente = trova(root, "CedentePrestatore")
fornitore = testo(cedente, "Denominazione") or " ".join(
x for x in (testo(cedente, "Nome"), testo(cedente, "Cognome")) if x
)
dgd = trova(root, "DatiGeneraliDocumento")
data = testo(dgd, "Data")
numero = testo(dgd, "Numero")
return f"{data}_{pulisci(fornitore)}_{pulisci(numero, 30)}.xml"
def main():
cartella = Path(sys.argv[1] if len(sys.argv) > 1 else ".")
prova = "--prova" in sys.argv
for f in sorted(cartella.iterdir()):
nome = f.name.lower()
if nome.endswith(".p7m"):
print(f"SALTATO (firmato, estrai prima l'XML): {f.name}")
continue
if not nome.endswith(".xml") or "_mt_" in nome:
continue
try:
dest = f.with_name(nuovo_nome(f))
except ET.ParseError:
print(f"ERRORE (XML non valido): {f.name}")
continue
n = 2
while dest.exists() and dest != f:
dest = dest.with_name(f"{dest.stem.rsplit('~', 1)[0]}~{n}.xml")
n += 1
print(f"{f.name} -> {dest.name}")
if not prova:
f.rename(dest)
if __name__ == "__main__":
main()Come usarlo
- Copia le fatture in una cartella di lavoro (mai sugli unici originali).
- Lancia
python3 rinomina_fatture.py /percorso/cartella --provae controlla i nomi proposti. - Rilancia senza
--provaper rinominare. Se due fatture produrrebbero lo stesso nome, la seconda riceve un suffisso~2.
Note tecniche
- Il confronto avviene sul nome locale dei tag, quindi funziona con qualsiasi prefisso (
p:,ns2:o nessuno). - Nei file con più fatture (lotti) viene usata la prima
DatiGeneraliDocumento. - Rinominare i file di lavoro non modifica il contenuto; per la conservazione a norma mantieni i file così come ricevuti dallo SdI.
Senza script: piano Studio
Con il piano Studio la rinomina per fornitore e data è un pulsante nella modalità in blocco, funziona anche sui .p7m e non richiede Python sui computer dello studio.
Risposte rapide
- come rinominare automaticamente le fatture xml con nome fornitore e data?
- Usa lo script Python di questa pagina, o la rinomina automatica del piano Studio di ApriFattura.
- come controllare velocemente il contenuto di una fattura xml prima di registrarla?
- Apri i file nella modalità in blocco per una tabella con numero, data, fornitore e totale.
- come archiviare le fatture elettroniche ricevute in pdf?
- Per la consultazione puoi salvarle in PDF con nomi ordinati (data_fornitore_numero); la conservazione a norma riguarda comunque i file XML. Vedi valore legale del PDF.
Cosa fare adesso
Preferisci un pulsante allo script? La rinomina per fornitore e data è inclusa nel piano Studio.
Scopri il piano StudioFonti
- Python – xml.etree.ElementTree
- FatturaPA – Formato e specifiche tecniche (fatturapa.gov.it)
- Specifiche tecniche del formato FatturaPA v1.4 (PDF)
Verificato il 12/11/2026. Le regole fiscali possono cambiare: in caso di dubbio fa fede la fonte ufficiale.