[Für Anfänger] Unerwartetes Verhalten, wenn beim Festlegen des Pfads in Python "\" enthalten ist

Einführung

Dieser Artikel fasst Vorsichtsmaßnahmen und Abhilfemaßnahmen beim Umgang mit Zeichenfolgen zusammen, die einen "" Backslash enthalten, z. B. beim Festlegen eines Pfads in einer Windows-Umgebung. (Auf dem Mac ist der Pfadbegrenzer ein "/" Schrägstrich, sodass Sie sich beim Festlegen des Pfads keine Sorgen machen müssen.)

Unerwartetes Verhalten, wenn die Zeichenfolge einen "" Backslash enthält

Wenn Sie beispielsweise den Ordnerpfad in der Windows-Umgebung wie unten gezeigt angeben, wird er möglicherweise anders behandelt als die erwartete Zeichenfolge.

python


dir_name = 'C:\testDir'
print(dir_name)
#Erwartete Zeichenfolge> C:\testDir
#Die tatsächlich angezeigte Zeichenfolge> C:      estDir

Der Grund dafür ist, dass der Windows-Pfadbegrenzer ** "" Backslash ** in Python für einen Prozess namens "Escape-Sequenzen" verwendet wird.

Welche Art der Verarbeitung ist "Escape-Sequenz"? Zum Beispiel, wenn Sie eine Zeile in einer Zeichenfolge unterbrechen möchten

python


txt = 'Hier Pause → ← Pause'
# print(txt)Ich möchte Folgendes anzeigen
#Zeilenumbruch hier →
#← Zeilenumbruch

Selbst wenn Sie die Eingabetaste drücken, nur weil Sie einen Zeilenumbruch einfügen möchten, tritt ein Zeilenumbruch im Code auf und ein Fehler tritt auf.

python


txt = 'Zeilenumbruch hier →
← Zeilenumbruch'
# SyntaxError: EOL while scanning string literal

Daher ist die Methode zur Darstellung von ** Sonderzeichen wie "Zeilenvorschub" "Escape-Sequenz" **. Das Zeichen, das einen Zeilenumbruch bedeutet, wird durch '\ n' 'dargestellt, eine Kombination aus Backslashes' '' und '' n ''.

python


txt = 'Zeilenumbruch hier →\n ← Zeilenumbruch'
print(txt)
#↓ Angezeigte Zeichenfolge
#Zeilenumbruch hier →
#← Zeilenumbruch

Im Beispiel für das Festlegen des ersten Pfads wird der \ t Teil von dir_name = 'C: \ testDir' als das Zeichen" TAB" behandelt. Es wurde von Python als "C: [TAB] estDir" erkannt und war eine unnatürlich leere Zeichenkette.

Ansatz

Daher gibt es eine Möglichkeit, "" als Zeichenfolge "" Backslash zu behandeln, wie es für die Escape-Sequenz anstelle von "" ist.

Methode 1: Rohzeichenfolge

Fügen Sie am Anfang der Zeichenfolge das Akronym "r" für "raw" hinzu, was "as is" bedeutet. Es wird als Rohzeichenfolge bezeichnet und so behandelt, wie es ist, ohne der Sequenz zu entkommen.

python


#Wenn r hinzugefügt wird, wird es so behandelt, wie es ist, und es wird nicht maskiert.
r'C:\testDir'

#Am Ende jedoch "\Kann nicht unterstützt werden, wenn es "" enthält
r'C:\testDir\'
# SyntaxError: EOL while scanning string literal

Methode 2: Escape den "" Backslash

Da "" auch ein Sonderzeichen ist, kann es durch eine Escape-Sequenz als "dies ist ein Backslash" ausgedrückt werden. Wenn Sie zwei Backslashes "\\" schreiben, werden diese als Backslashes behandelt.

python


#Zwei Schrägstriche "\\Schreiben Sie, um dem Backslash selbst zu entkommen
'C:\\testDir'

Methode 3: Schreiben Sie den "" Back Slash in "/" Slash um

Ich denke, diese Methode ist die beste für den Weg. Da das Trennzeichen des Pfads von Linux und Mac ein "/" Schrägstrich ist, können Sie Probleme vermeiden, wenn Sie die Umgebung ändern.

Denn Windows kann auch mit dem Trennzeichen "/" Schrägstrich unterstützen Schreiben Sie den Schrägstrich "" in den Schrägstrich "/" um, um damit umzugehen.

python


# 「\"Back Slash"/Zum Schrägstrich umschreiben
'C:/testDir'

wichtiger Punkt

Als Vorsichtsmaßnahme beim Umschreiben des Schrägstrichs in einen Schrägstrich Wenn Sie die Funktion zum Abrufen des Pfads verwenden, lautet das Trennzeichen des Pfads "" Backslash.

Folgendes wird unter 'C: \ testDir' ausgeführt.

python


import os
#Holen Sie sich das aktuelle Verzeichnis(Arbeitsordner)
current_dir = os.getcwd()
print(current_dir)
# C:\testDir 「\Holen Sie sich mit einem Backslash

Wenn Sie diesen erfassten Pfad verwenden und die nachfolgenden Pfade selbst festlegen, müssen Sie darauf achten, "/" und "" nicht zu mischen.

python


import os
#Holen Sie sich das aktuelle Verzeichnis
current_dir = os.getcwd()
#Ordner für Bilder festlegen "/Schreiben Sie den Fortsetzungspfad mit
image_dir = f'{current_dir}/image'
print(image_dir)
# C:\testDir/image 「\」「/"Gemischt

Die Python-Funktion funktioniert auch dann, wenn sie gemischt ist. Wenn Sie jedoch den Pfad an ein anderes System übergeben oder den Pfad als Zeichenfolge bearbeiten, tritt ein Fehler auf. Beispiel) Beim Festlegen des Download-Ordners von Chrome in Selenium

Ersetzen Sie daher als Problemumgehung "" durch "/", wenn Sie den Pfad abrufen, und rufen Sie ihn dann ab.

python


import os
#Wenn Sie das aktuelle Verzeichnis abrufen, setzen Sie das Trennzeichen auf "/Ersetzt mit
current_dir = os.getcwd().replace(os.sep,'/')
print(current_dir)
# C:/testDir

abschließend

Danke für Ihren Besuch. Es gibt verschiedene Möglichkeiten, mit dem "" Backslash umzugehen, aber lassen Sie uns Regeln vor Ort oder selbst festlegen und vereinheitlichen, damit wir uns problemlos entwickeln können.

Referenz

Escape-Sequenz verwenden Roher String, der Escape-Sequenzen in Python ignoriert (deaktiviert) Get Separator

Recommended Posts

[Für Anfänger] Unerwartetes Verhalten, wenn beim Festlegen des Pfads in Python "\" enthalten ist
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Beim Lesen eines Bildes mit SimpleITK tritt ein Problem auf, wenn sich Japanisch im Pfad befindet
Überprüfen Sie das Verhalten beim Zuweisen von Python
Verhalten beim Auflisten in Python heapq
Holen Sie sich den Desktop-Pfad in Python
Holen Sie sich den Skriptpfad in Python
Holen Sie sich den Desktop-Pfad in Python
Wofür ist der Python-Unterstrich (_)?
Führen Sie unittest in Python aus (für Anfänger)
Verhalten, wenn 0, 1, False, True für die Diktiertaste verwendet wird
[Golang] Überprüfen Sie, ob eine bestimmte Zeichenfolge in der Zeichenfolge enthalten ist
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
Überprüfen Sie das Verhalten des Zerstörers in Python
Verhalten bei der Rückkehr in den with-Block
Inject wird für DDD in Python empfohlen
[Python, Multiprocessing] Verhalten für Ausnahmen bei Verwendung von Multiprocessing
[Beispiel für eine Python-Verbesserung] Was ist die empfohlene Lernseite für Python-Anfänger?
Überprüfen Sie, ob die URL in Python vorhanden ist
Was ist "Mahjong" in der Python-Bibliothek? ??
Wenn das Ziel Ubuntu 16.04 in Ansible ist
MongoDB mit Python zum ersten Mal
Benachrichtigen Sie mit Notification Center, wenn die Ausführungsumgebung in Python macOS ist
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Auch wenn die Entwicklungssprache in Cloud9 in Python3 geändert wird, wird Version 2 in Python - Version angezeigt
Benachrichtigen Sie mit Notification Center, wenn die Ausführungsumgebung in Python macOS ist
Unterschiede im Verhalten jeder LL-Sprache, wenn der Listenindex übersprungen wird
CERTIFICATE_VERIFY_FAILED in Python 3.6, dem offiziellen Installationsprogramm für macOS
Der schnellste Weg für Anfänger, um Python zu beherrschen
Überprüfen Sie, ob die Zeichen in Python ähnlich sind
Was ist im Docker Python-Image pfeifend?
Über den Unterschied zwischen "==" und "is" in Python
Tipps zum Erreichen der ATND-API mit Python
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
Verhalten beim Speichern eines Python-Datetime-Objekts in MongoDB
[Einführung für Anfänger] Umgang mit MySQL mit Python
Grundlegende Geschichte der Vererbung in Python (für Anfänger)
Bibliotheken, die beim Erstellen von APIs in der Django Rest Frakework-Umgebung, in vscode-Erweiterungen usw. enthalten sein sollten (für Anfänger)
Python - Wenn das Verhalten der Anweisung unter mehreren Bedingungen beurteilt wird (obwohl die Reihenfolge unterschiedlich ist)
Importieren Sie audit.log in Splunk und überprüfen Sie das Verhalten beim ersten Start von Splunk.
Was tun, wenn der Fortschrittsbalken in tqdm von Python nicht angezeigt wird?
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
[Für Anfänger] Web-Scraping mit Python "Greifen Sie auf die URL auf der Seite zu, um den Inhalt abzurufen."
Beachten Sie Folgendes, wenn Sie automatisierte Tools für die Werkstatt in Python erstellen
[Python] Vorsichtsmaßnahmen, wenn es nicht funktioniert, auch wenn TimedRotatingFileHandler in basicConfig in Python2 festgelegt ist
[Einführung in Python] Was ist das wichtige "if __name__ == '__ main__':" beim Umgang mit Modulen?
Python> Überprüfen Sie, ob Code druckbar ist> Verwenden Sie ord () / all (c in string.printable für c in hallo)
Janken Poi in Python für Anfänger (Antworten und Erklärungen)
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Überprüfen Sie, ob es sich um Unix in der Skriptsprache handelt
Suchen Sie den Teil 575 aus Wikipedia in Python
Einbetten in datetime, wenn nur die Zeit bekannt ist
Electron ist die beste Lösung für die plattformübergreifende Entwicklung von Python
Bestimmen Sie, ob im Objekt ein Attribut definiert ist
Python-Übung für Anfänger # 1 [Grundlegende Datentypen / If-Anweisungen]
[Für Anfänger] Lernen Sie in 5 Stunden kostenlos die grundlegende Python-Grammatik!
Für diejenigen, die in Schwierigkeiten sind, weil NFC beim Lesen von NFC mit Python endlos gelesen wird
Was tun, wenn aufgrund der Proxy-Einstellungen in Python Web Scraping keine Antwort erfolgt?
Dies ist schneller zu verwenden, wenn Anweisung oder Wörterbuchtyp beim Konvertieren einer Zeichenfolge (a-> b) in Python