Seite 1 von 1

backslash und strings

Verfasst: Donnerstag 23. April 2009, 09:24
von Shanon
Hallo, ich wollte mir in python ein script schreiben, um meine Visual Studio Projekte aufzuräumen:
import os

dir = os.listdir("./")
for x in dir:
if os.path.isdir(x):
file_muster = x + "\Muster.ncb"
if os.path.isfile(file_muster):
os.remove(file_muster)
subfolder = x + "\Release"

if os.path.isdir(subfolder):
release_files = os.listdir("./" + subfolder)
for file in release_files:
tmp = subfolder + "\" + file
print(tmp)
#os.remove(tmp)
#os.rmdir(subfolder)
Der erste Teil des Script klappt soweit, nur die rot makierte Zeile will nicht. Komischerweise, wenn ich den \ mit einem anderen Zeichen ersetze, klappt das Script. Sonst bekomm ich immer ein "SynthaxError: None".
Gibt es eigentlich eine Möglichkeit direkt einen Ordner der Dateien/Ordner enthält mit einem Befehl zu löschen? Würde ich das Problem mit hinfällig machen.[/code]

Verfasst: Donnerstag 23. April 2009, 09:31
von Barabbas
Diese Seite dürfte dich interessieren.

Was das Löschen betrifft: Wirf mal einen Blick auf shutil.

Gruß,

brb

Verfasst: Donnerstag 23. April 2009, 09:38
von Rebecca
Und zum Zusammensetzen von Pfaden nimmt man os.path.join.

Verfasst: Donnerstag 23. April 2009, 09:46
von Shanon
Vielen Dank. Da benutzt man "\n" andauernd und sieht nicht die Probleme, die bei "\" aufkommen nicht. Naja, stand da wohl ziemlich auf dem Schlauch grade.

Hier die bereinigte Version:

Code: Alles auswählen

import os
import shutil

dir = os.listdir("./")
for x in dir:
	if os.path.isdir(x):
			file_muster = os.path.join(x, "Muster.ncb")
			if os.path.isfile(file_muster):
				os.remove(file_muster)
			subfolder = os.path.join(x, "Release")
			
			if os.path.isdir(subfolder):
				shutil.rmtree(subfolder)

Verfasst: Donnerstag 23. April 2009, 11:57
von derdon
Es gibt os.curdir

Verfasst: Samstag 25. April 2009, 08:34
von sma
Um die eigntliche Frage noch mal zu beantworten: In einem normalen String muss das \, zu \\ verdoppelt werden, da es ein Escape-Zeichen ist, welches spezielle Zeichen wie \n, \r oder \x00 markiert.

Stefan

Verfasst: Samstag 25. April 2009, 11:23
von EyDu
Oder alternativ:

Code: Alles auswählen

r"\noch etwas text"
Dann werden alle Escape-Sequenzen ignoriert.

Verfasst: Samstag 25. April 2009, 12:27
von lunar
Nicht alle:

Code: Alles auswählen

>>> print r'foo\'
  File "<stdin>", line 1
    print r'foo\'
                ^
SyntaxError: EOL while scanning string literal