Wie soll ich einen Windows-Pfad in ein Python-String-Literal schreiben?

Lesezeit: 5 Minuten

Benutzeravatar von Gareth
Gareth

Wie stellt man beispielsweise ein Windows-Verzeichnis am besten dar? "C:\meshes\as"? Ich habe versucht, ein Skript zu ändern, aber es funktioniert nie, weil ich das Verzeichnis anscheinend nicht richtig bekomme, nehme ich an, wegen der '\' als Fluchtfigur fungieren?

Benutzeravatar von joaquin
Joaquin

Sie können immer verwenden:

'C:/mydir'

Dies funktioniert sowohl unter Linux als auch unter Windows. Andere Möglichkeit ist

'C:\\mydir'

Wenn Sie Probleme mit einigen Namen haben, können Sie auch rohe Zeichenfolgenliterale ausprobieren:

r'C:\mydir'

Die beste Vorgehensweise ist jedoch die Verwendung von os.path Modulfunktionen, die immer die richtige Konfiguration für Ihr Betriebssystem auswählen:

os.path.join(mydir, myfile)

Ab Python 3.4 können Sie auch die verwenden pathlib Modul. Das ist äquivalent zu obigem:

pathlib.Path(mydir, myfile)

oder

pathlib.Path(mydir) / myfile

  • @Gareth, ich bin sehr faul und habe oft ‘/’ verwendet. Langfristig ist jedoch die Verwendung von os.path bequemer. Außerdem können Sie mydir und myfile als Variablen verwenden, die Sie leicht ändern können.

    – Joaquín

    1. Juni 2010 um 22:48 Uhr

  • Das einzige, womit man bei Raw-Strings vorsichtig sein sollte, ist, dass sie nicht mit \ enden können

    – Douglas Leder

    29. Juni 2010 um 16:15 Uhr

  • Sie können os.path.join() verwenden, um die Notwendigkeit zu beseitigen, Pfade mit \ zu beenden.

    – Will Ediger

    5. August 2014 um 14:53 Uhr

  • Ich mag die r-Syntax (raw string). Nützlich, wenn Sie einen langen Pfad kopieren, wo Sie normalerweise alle umgekehrten Schrägstriche durch Schrägstriche ersetzen müssten

    – peterb

    21. August 2016 um 5:07 Uhr

  • Raw-String kann mit \\ enden, sodass wir eine Datei mit dem Pfad verketten können: codecs.open(r”C:\maXbox\EKON24\tweet_data\\” + file, ‘r’, encoding=’utf-8′) as f:

    – Max Kleiner

    24. Juni 2020 um 13:34 Uhr

Benutzeravatar von S.Lott
S. Lott

Verwenden Sie die os.path Modul.

os.path.join( "C:", "meshes", "as" )

Oder verwenden Sie rohe Saiten

r"C:\meshes\as"

Ich würde auch empfehlen, keine Leerzeichen in den Pfad- oder Dateinamen zu verwenden. Und Sie könnten doppelte Backslashes in Ihren Zeichenfolgen verwenden.

"C:\\meshes\\as.jpg"

  • os.path.join verhält sich möglicherweise nicht wie erwartet, wenn eine Komponente ein Laufwerksbuchstabe ist, da auch dann relative Pfade zulässig sind. (Das Ergebnis der ersten Zeile ist ‘C:meshes\\as’ unter Windows.)

    – Dash-Tom-Bang

    1. Juni 2010 um 23:04 Uhr


  • Der Kommentar von @dash-tom-bang ist wirklich wichtig. Ist das Richtige zu tun, um zu setzen "C:\" als erster Eintrag? Bringt das etwas von der Sauberkeit der Benutzung durcheinander? join?

    – Jack O’Connor

    21. Februar 2014 um 0:53 Uhr

  • @JackO’Connor das mache ich. Sie wollen sicherlich nicht setzen "C:\" in der Mitte des Dateinamens. Außerdem können Sie verwenden os.path.normpath vor oder nach einem Join, um sicherzustellen, dass der Pfad gut gedruckt wird.

    – Agostino

    7. April 2015 um 18:03 Uhr


  • aber es geht auch nicht. Was funktioniert ist os.path.join( "C:\\", "meshes", "as" )

    – Jean-Francois Fabre

    2. März 2019 um 11:32 Uhr


  • @JackO’Connor Sie haben es mit Windows zu tun und machen sich Sorgen um die Sauberkeit? 😉

    – Jürgen A. Erhard

    8. August 2021 um 9:36 Uhr

vaultahs Benutzeravatar
Gewölbe

Ja, \ in Python bezeichnen String-Literale den Beginn einer Escape-Sequenz. In Ihrem Pfad befindet sich eine gültige Escape-Sequenz aus zwei Zeichen \adie zusammengebrochen ist einer Charakter das ist ASCII-Glocke:

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

Andere gebräuchliche Escape-Sequenzen umfassen \t (Tab), \n (Zeilenvorschub), \r (Wagenrücklauf):

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

Wie Sie sehen können, wurden in all diesen Beispielen der umgekehrte Schrägstrich und das nächste Zeichen im Literal zusammen gruppiert, um ein einzelnes Zeichen in der letzten Zeichenfolge zu bilden. Die vollständige Liste der Escape-Sequenzen von Python ist hier.

Es gibt verschiedene Möglichkeiten, damit umzugehen:

  1. Python verarbeitet keine Escape-Sequenzen in Zeichenfolgenliteralen mit dem Präfix r oder R:

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Python unter Windows sollte auch mit Schrägstrichen umgehen können.

  3. Du könntest benutzen os.path.join

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. … oder die neuere pathlib Modul

    >>> from pathlib import Path
    >>> Path('C:', "https://stackoverflow.com/", 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    

Benutzeravatar von Contango
Contango

Verwenden Path:

from pathlib import Path
data_folder = Path("source_data/text_files/")
file_to_open = data_folder / "raw_data.txt"
print(file_to_open.read_text())

Path nimmt eine pfadähnliche Zeichenfolge und passt alles für das aktuelle Betriebssystem an, entweder Windows oder Linux. Beispielsweise würde es unter Linux alle umgekehrten Schrägstriche in Schrägstriche umwandeln, und unter Windows würde es das Gegenteil tun.

Ganzer Artikel: Python 3 Quick Tip: Der einfache Weg, mit Dateipfaden unter Windows, Mac und Linux umzugehen


Meine Erfahrung:

  • Ich habe 6 Monate damit verbracht os.path.join(...)wechselte dann zu normpath(...) dann endlich umgestellt Path(...). Nachdem alle drei verwendet wurden, ist Path die beste aller Welten.

Vorteile von Path over os.path.join(...):

  • Reiniger.
  • Weniger tippen.
  • Einfacher, die Pfade zu lesen (dh besser lesbar).
  • Kann zwei verschiedene Pfade mit verbinden / (siehe oben).
  • Mehr modern.

Vorteile von weg vorbei normpath(...):

  • Kann Pfade mit verbinden / anstatt darauf zurückgreifen zu müssen os.path.join(...)mit verschachtelten Normpath-Aufrufen, um die Dinge zu reparieren.
  • Reiniger.
  • Weniger tippen.
  • Einfacher, die Pfade zu lesen (dh besser lesbar).
  • Geringere Wahrscheinlichkeit von Fehlern bei der Portierung zwischen Linux und Windows.
  • Mehr modern.

Python-Rohzeichenfolgen werden erstellt, indem einem Zeichenfolgenliteral „r“ oder „R“ vorangestellt wird. Der Python-Rohstring behandelt den umgekehrten Schrägstrich () als Literalzeichen. Dies ist nützlich, wenn wir eine Zeichenfolge haben möchten, die einen Backslash enthält und nicht als Escape-Zeichen behandelt werden soll.

Manuell tun, wie zum Beispiel:

WindowsPath("C:\meshes\as")

oder mit r oder R:

WindowsPath(r'C:/meshes/as')

1440090cookie-checkWie soll ich einen Windows-Pfad in ein Python-String-Literal schreiben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy