Python - Kann (oder sollte) ich os.path.sep ändern?

8

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:

%Vor%

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!

    
Chris 03.04.2013, 17:00
quelle

4 Antworten

7

Ich würde meine Finger von os.sep lassen und os.path.normpath () für das Ergebnis der Kombination der Wurzel und eines Dateinamens verwenden:

%Vor%     
Anthon 03.04.2013 17:06
quelle
4

Ich benutze '/'.join([path1, path2]) , um dieses Problem zu lösen, weil '/' in Windows und Linux gut funktioniert.

    
oppo 20.08.2013 08:17
quelle
1

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])

    
jurgenreza 03.04.2013 17:20
quelle
0

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.

    
Tommy Strand 26.05.2016 08:38
quelle

Tags und Links