Dove posso trovare un elenco di caratteri consentiti nei nomi dei file, a seconda del sistema operativo? (ad esempio su Linux, il carattere :
è consentito nei nomi di file, ma non su Windows)
Potresti iniziare con la pagina Nome file di Wikipedia . Ha una tabella abbastanza decente ( Confronto delle limitazioni dei nomi dei file ) che elenca i caratteri riservati per un numero elevato di file system.
Oltre ai nomi di file riservati come CON
in MS-DOS. Ricordo di essere stato morso da quella volta quando ho accorciato il file include da const.h
a con.h
e con.h
trascorso mezz’ora a capire perché il compilatore era appeso. Si scopre che le estensioni DOS ignorate per i dispositivi in modo che con.h
fosse esattamente la stessa cosa di con
, la console di input (il che significava, naturalmente, che il compilatore mi stava aspettando per digitare il file di intestazione prima che continuasse).
Su Windows OS crea un file e assegnagli un carattere non valido come \
nel nome del file. Di conseguenza otterrai un popup con tutti i caratteri non validi in un nome file.
OK, quindi guarda il confronto dei file system se ti interessano solo i file system dei giocatori principali:
NUL
, \
, /
, :
, *
, "
, <
, >
, |
:
o /
NUL
o /
quindi ogni byte eccetto NUL
, \
, /
, :
, *
, "
, <
, >
, |
e non puoi avere chiamate file / cartelle o ..
e nessun carattere di controllo (ovviamente).
Per essere più precisi su Mac OS X (ora chiamato MacOS) /
nel Finder si interpreta :
nel file system Unix.
Questo è stato fatto per la compatibilità con le versioni precedenti quando Apple si è spostato da Classic Mac OS.
È legittimo utilizzare un /
in un nome file nel Finder, guardando lo stesso file nel terminale che verrà visualizzato con :
E funziona anche il contrario: non è ansible utilizzare un /
in un nome file con il terminale, ma a :
è OK e verrà visualizzato come /
nel Finder.
Alcune applicazioni potrebbero essere più restrittive e proibire entrambi i personaggi per evitare confusione o perché mantenevano la logica dal precedente Mac OS classico o per la compatibilità dei nomi tra le piattaforms.
Ecco il codice per pulire il nome del file in python.
import unicodedata def clean_name(name, replace_space_with=None): """ Remove invalid file name chars from the specified name :param name: the file name :param replace_space_with: if not none replace space with this string :return: a valid name for Win/Mac/Linux """ # ref: https://en.wikipedia.org/wiki/Filename # ref: https://stackoverflow.com/questions/4814040/allowed-characters-in-filename # No control chars, no: /, \, ?, %, *, :, |, ", <, > # remove control chars name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C') cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name) if replace_space_with is not None: return cleaned_name.replace(' ', replace_space_with) return cleaned_name