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?
Wie soll ich einen Windows-Pfad in ein Python-String-Literal schreiben?
Gareth
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
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 verwendenos.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
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 \a
die 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:
-
Python verarbeitet keine Escape-Sequenzen in Zeichenfolgenliteralen mit dem Präfix
r
oderR
:>>> r'C:\meshes\as' 'C:\\meshes\\as' >>> print(r'C:\meshes\as') C:\meshes\as
-
Python unter Windows sollte auch mit Schrägstrichen umgehen können.
-
Du könntest benutzen
os.path.join
…>>> import os >>> os.path.join('C:', os.sep, 'meshes', 'as') 'C:\\meshes\\as'
-
… oder die neuere
pathlib
Modul>>> from pathlib import Path >>> Path('C:', "https://stackoverflow.com/", 'meshes', 'as') WindowsPath('C:/meshes/as')
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 zunormpath(...)
dann endlich umgestelltPath(...)
. 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üssenos.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')
Siehe auch: medium.com/swlh/…
– Serverüberlauf
21. März 2022 um 10:47 Uhr