Ich schreibe ein Skript, um mehrere Protokolldateien zu analysieren und eine Liste der Dateien zu verwalten, die verarbeitet wurden. Wenn ich die Liste der zu verarbeitenden Dateien lese, verwende ich os.walk
und bekomme Namen, die der folgenden ähneln:
Dies wird durch den folgenden Code erstellt:
%Vor%Es scheint, dass "root" Schrägstriche als Trennzeichen verwendet (ich bin auf Windows und finde das bequemer), aber "Dateiname" verwendet umgekehrte Schrägstriche, sodass ich einen inkonsistenten Pfad für die Datei erhalte, da sie eine Mischung aus vorwärts enthält und zurück Schrägstriche als Trennzeichen.
Ich habe versucht, das Trennzeichen mit:
zu setzen %Vor%und
%Vor%Vor dem .join aber scheint es keinen Effekt zu haben. Mir ist klar, dass ich theoretisch die Zeichenkette manipulieren könnte, aber längerfristig möchte ich, dass mein Skript sowohl unter Unix als auch unter Windows läuft, also würde es möglichst dynamisch sein.
Vermisse ich etwas?
Aktualisierung:
Basierend auf den unten stehenden hilfreichen Antworten sieht es so aus, als ob mein Problem selbst zugefügt wurde. Aus praktischen Gründen hatte ich den ursprünglichen Pfad wie folgt festgelegt:
%Vor%Als ich es geändert habe:
%Vor%Alles funktioniert und meine resultierenden Dateipfade verwenden durchgängig das "\". Es sieht so aus, als wäre mein Ansatz falsch gewesen, weil ich versucht habe, Python dazu zu bringen, das Verhalten zu ändern, anstatt zu korrigieren, was ich als Wert eingestellt habe.
Danke!
Sie sollten besser os.sep
und os.path.sep
nicht berühren, da sie nicht das sind, was os.path.join
verwendet. Sie könnten os.path.normpath
wie von Anthon vorgeschlagen verwenden. Eine andere Alternative ist, dass Sie Ihren eigenen einfachen Pfad beitreten können:
os.sep.join([i1,i2,i3])
Ich habe die folgende Dienstprogrammfunktion bevorzugt.
%Vor%Es konvertiert beide Varianten (Linux-Stil und Windows-Stil) in den Linux-Stil. Beide Windows und Linux unterstützt '/' Separator in Python.
Ich habe die vereinfachte os.sep.join (['str', 'str', 'str'])) abgelehnt , weil vorhandene Trennzeichen nicht berücksichtigt werden. Nehmen Sie den folgenden Fall mit sep.join vs vanilla join:
%Vor%Der Vanilla-Join könnte mit dem vorgeschlagenen:
repariert werden %Vor%So weit, Gott. Aber dann führen wir das folgende Szenario ein, in dem wir mit Linux von Windows aus interagieren werden.
%Vor%Das obige wird dann fehlschlagen, weil der sftp-Server ein Trennzeichen '/' erwartet, während os.path.normpath bei Fenstern auf '\' normalisiert wird.
Wenn Sie das Dienstprogramm pjoin o.ä. verwenden, funktioniert es über OS, Web, FTP usw.
Tags und Links python