Ich habe einen String, den ich als Dateinamen verwenden möchte, daher möchte ich alle Zeichen entfernen, die in Dateinamen nicht erlaubt wären, mit Python.
Ich wäre lieber streng als nachlässig, also möchte ich nur Buchstaben, Zahlen und eine kleine Menge anderer Zeichen wie "_-.() "
behalten. Was ist die eleganteste Lösung?
Der Dateiname muss auf mehreren Betriebssystemen gültig sein (Windows, Linux und Mac OS) - es handelt sich um eine MP3-Datei in meiner Bibliothek mit dem Songtitel als Dateiname und wird zwischen 3 Maschinen gemeinsam genutzt und gesichert.
35 Stimmen
Sollte dies nicht in das os.path-Modul integriert sein?
5 Stimmen
Vielleicht, obwohl ihr Anwendungsfall einen einzigen sicheren Pfad über alle Plattformen erfordern würde, nicht nur die aktuelle, wofür das Betriebssystem nicht konzipiert ist, um damit umzugehen.
6 Stimmen
Um den obigen Kommentar zu erweitern: Das aktuelle Design von
os.path
lädt tatsächlich je nach Betriebssystem eine andere Bibliothek (siehe die zweite Notiz in der Dokumentation). Wenn eine Quoting-Funktion inos.path
implementiert wäre, könnte sie nur das Zeichenfolge für POSIX-Sicherheit quoten, wenn sie auf einem POSIX-System ausgeführt wird, oder für Windows-Sicherheit, wenn sie auf Windows ausgeführt wird. Der resultierende Dateiname wäre nicht unbedingt gültig für sowohl Windows als auch POSIX, was die Frage verlangt.0 Stimmen
Es ist einfach genug, die
Pfad
-Funktionen für ein anderes Betriebssystem zu verwenden. Verwenden Sie beispielsweise auf Uniximport ntpath; ntpath.abspath("a.txt")
, um den absoluten Pfad einer Datei in einem (hypothetischen) Windows-Dateisystem zu erhalten. Oder verwenden Sieposixpath
für POSIX-Systeme (Linux, Mac OS).