Windows-Pfad in Python


151

Wie lässt sich beispielsweise ein Windows-Verzeichnis am besten darstellen "C:\meshes\as"? Ich habe versucht, ein Skript zu ändern, aber es funktioniert nie, weil ich das Verzeichnis nicht richtig zu finden scheine, nehme ich an, weil es '\'als Escape-Charakter fungiert.

Antworten:


219

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 String-Literale ausprobieren:

r'C:\mydir'

Es wird jedoch empfohlen, die os.pathModulfunktionen zu verwenden, mit denen immer die richtige Konfiguration für Ihr Betriebssystem ausgewählt wird:

os.path.join(mydir, myfile)

Ab Python 3.4 können Sie auch das pathlib- Modul verwenden. Dies ist gleichbedeutend mit dem oben Gesagten:

pathlib.Path(mydir, myfile)

oder

pathlib.Path(mydir) / myfile

2
@Gareth, ich bin sehr faul und habe oft '/' benutzt. Auf lange Sicht ist die Verwendung von os.path jedoch bequemer. Außerdem können Sie mydir und myfile als Variablen verwenden, die Sie leicht ändern können.
Joaquin

13
Das einzige, was bei rohen Saiten zu beachten ist, ist, dass sie nicht mit \
Douglas Leeder

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

1
Ich mag die Syntax r (Raw String). Nützlich, wenn Sie einen langen Pfad kopieren, auf dem Sie normalerweise alle
umgekehrten

Die Rohzeichenfolge kann mit \\ enden, sodass wir eine Datei mit dem Pfad verketten können: codecs.open (r "C: \ maXbox \ EKON24 \ tweet_data \\" + Datei, 'r', encoding = 'utf-8') als f:
Max Kleiner

20

Verwenden Sie das os.pathModul.

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

Oder verwenden Sie rohe Zeichenfolgen

r"C:\meshes\as"

Ich würde auch empfehlen, keine Leerzeichen im Pfad oder Dateinamen. Und Sie könnten doppelte Backslashes in Ihren Saiten verwenden.

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

11
os.path.join verhält sich möglicherweise nicht so, wie Sie es erwarten, wenn eine Komponente ein Laufwerksbuchstabe ist, da relative Pfade auch dann zulässig sind. (Das Ergebnis der ersten Zeile ist 'C: meshes \\ as' unter Windows.)
dash-tom-bang

@ dash-tom-bangs Kommentar ist wirklich wichtig. Ist es richtig, "C:\"als ersten Eintrag zu setzen? Beeinträchtigt das die Sauberkeit der Verwendung join?
Jack O'Connor

1
@ JackO'Connor das ist was ich tue. Sie möchten sicher nicht "C:\"in die Mitte des Dateinamens setzen. Außerdem können Sie os.path.normpathvor oder nach einem Join verwenden, um sicherzustellen, dass der Pfad ordnungsgemäß gedruckt wird.
Agostino

aber es funktioniert auch nicht. Was funktioniert istos.path.join( "C:\\", "meshes", "as" )
Jean-François Fabre

17

Ja, \in Python bezeichnet String-Literale den Beginn einer Escape-Sequenz. In Ihrem Pfad haben Sie eine gültige Escape-Sequenz mit zwei Zeichen \a, die zu einem Zeichen zusammengefasst ist, das ASCII Bell ist :

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

Andere gebräuchliche Escape-Sequenzen sind \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 Backslash und das nächste Zeichen im Literal zu einem einzigen Zeichen in der letzten Zeichenfolge zusammengefasst. Die vollständige Liste der Escape-Sequenzen von Python finden Sie hier .

Es gibt verschiedene Möglichkeiten, damit umzugehen:

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

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Python unter Windows sollte auch Schrägstriche verarbeiten.

  3. Sie könnten verwenden os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. ... oder das neuere pathlibModul

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    

-1

Verwenden Sie PowerShell

Unter Windows können Sie /in Ihrem Pfad genau wie Linux oder macOS an allen Stellen verwenden , solange Sie PowerShell als Befehlszeilenschnittstelle verwenden. Es kommt vorinstalliert auf Windows und unterstützt viele Linux - Befehle wie lsBefehl.

Wenn Sie die Windows-Eingabeaufforderung verwenden (die angezeigt wird, wenn Sie das cmdWindows-Startmenü eingeben), müssen Sie Pfade angeben, die sich \direkt darin befinden. Sie können /Pfade an allen anderen Stellen verwenden (Code-Editor, interaktiver Python-Modus usw.).


-1

Wenn Sie einen Windows-Pfad aus einer anderen Quelle (z. B. dem Datei-Explorer) einfügen möchten, können Sie dies per input()Aufruf in der Python-Konsole tun :

>>> input()
D:\EP\stuff\1111\this_is_a_long_path\you_dont_want\to_type\or_edit_by_hand
'D:\\EP\\stuff\\1111\\this_is_a_long_path\\you_dont_want\\to_type\\or_edit_by_hand'

Dann kopieren Sie einfach das Ergebnis

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.