backslash und strings

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Shanon
User
Beiträge: 4
Registriert: Montag 12. Juni 2006, 22:12

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]
Zuletzt geändert von Shanon am Donnerstag 23. April 2009, 09:34, insgesamt 2-mal geändert.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Diese Seite dürfte dich interessieren.

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

Gruß,

brb
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Und zum Zusammensetzen von Pfaden nimmt man os.path.join.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Shanon
User
Beiträge: 4
Registriert: Montag 12. Juni 2006, 22:12

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)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Es gibt os.curdir
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Oder alternativ:

Code: Alles auswählen

r"\noch etwas text"
Dann werden alle Escape-Sequenzen ignoriert.
Das Leben ist wie ein Tennisball.
lunar

Nicht alle:

Code: Alles auswählen

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