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.

Gareth
quelle

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
Joaquin
quelle
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"
S.Lott
quelle
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')
    
Vaultah
quelle
-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.).

Ammar Alyousfi
quelle
-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

EP
quelle