Hallo liebes Forum,
ich habe ein sehr ärgerliches Problem.
Ich erarbeite mir ein Skrippt zum auslesen von ext. HDD wobei der gesammte inhalt auf einen Servr kopiert werden soll.
Im Pronzip funktioniert das ganze auch. Aber ich lese mir aus einer bestimmten Datei auf der HDD den Filenamen aus und benötige davon die ersten 6 Ziffern um damit mehrere Zeilordner auf dem Server zu erzeugen.
Das Funktioniert auch ..
ich kann aber nicht in diese Verzeichnisse wechseln, da dieses Verzeichnis als Variable vorliegt und das System mit meiner Eingabe nicht umgehen kann. Jedoch gibt es keinen Syntaxfehler.
der konkrete Fall: li ist dabei die variable für das Zielverzeichnis
for j in (pol):
li = pol[1][0:6]
print li
break
ich wechsle mit
os.chdir(server)
os.system("mkdir "+li+"")
auf den server..
per os.listdir sehe ich auch das das Folder "li" erzeugt wurde.
jedoch,will ich nun kopieren mit
os.system("copy D:\test "+li+"")
bekomme ich "Das System kann den angegebenen Pfad nicht finden",selbst wenn ich den kompletten Pfad mit \"+li+" eingebe:
os.system("copy D:\test S:\"+li+" ")
ich bin aber ohnehin im richtigen verzeichnis. und ich komme nicht um den Weg herum für das Zielfolder eine Variable zu benutzen, da dieses Skrippt für hunderte von HDD funktionieren muss.
ich hoffe ihr könnt mir helfen was ich in der Eingabe verkehrt mache
beste grüße
Otto
Python 2.7; variable im copy path
- OttoPython
- User
- Beiträge: 47
- Registriert: Montag 23. April 2012, 14:14
"Im Burnout steckt viel Arbeit drin" -Lysander
Wenn du Shell-Programmierung willst, dann verwende die Shell.OttoPython hat geschrieben:Code: Alles auswählen
os.chdir(server) os.system("mkdir "+li+"")
Wenn du Python möchtest, dann verwende hier os.mkdir (oder os.makedirs).
Verwende zum Zusammensetzen von Pfaden sinnvollerweise os.path.join. Bist du völlig sicher, dass auf deinem Laufwerk S der angegebene Pfad existiert? Genaues Studium der Daten und der Fehlermeldung kann einem da manchmal die Augen öffnen.OttoPython hat geschrieben:jedoch,will ich nun kopieren mit
os.system("copy D:\test "+li+"")
bekomme ich "Das System kann den angegebenen Pfad nicht finden",selbst wenn ich den kompletten Pfad mit \"+li+" eingebe:
os.system("copy D:\test S:\"+li+" ")
Zum Kopieren könntest du übrigens shutil.copytree verwenden.
@OttoPython: Setze doch Quelltext bitte in Python-Code-Tags, damit die Einrückung erhalten bleibt und der Quelltext farbig hervorgehoben wird.
Dein Problem hat nichts mit den Variablen zu tun, sondern das '\t' kein rückwärtsgerichteter Schrägstrich gefolgt von einem kleinen T ist, sondern *ein* Zeichen und zwar das Tabulatorzeichen:
Warum verwendest Du überhaupt Python wenn das Programm hauptsächlich aus `os.system()`-Aufrufen besteht? Zum Erzeugen von Verzeichnissen und Kopieren von Dateien gibt es Funktionen in der Standardbibliothek. Schau Dir mal das `os`-Modul genauer an, und dazu das `shutil`-Modul.
Pfade sollte man mit den Funktionen im `os.path`-Modul verarbeiten.
Von `os.chdir()` und `os.system()` sollte man die Finger lassen. Das Arbeitsverzeichnis des Prozesses ist ein global gültiger Wert. Den zu verändern skaliert nicht und bei Problemen kann es schnell passieren dass man auf ganz andere Verzeichnisse zugreift, als man eigentlich wollte. Zum Beispiel wenn man an einer Stelle das Arbeitsverzeichnis ändert, Quelltext an andere Stelle aber davon ausgeht, dass es sich nicht verändert (hat). Statt `os.system()` sollte man sich an das `subprocess`-Modul halten.
Namen wie `li` und `pol` sind schlecht. Namen sollten dem Leser die Bedeutung der Werte, die daran gebunden sind, vermitteln. Unter solchen Abkürzungen (?) kann sich niemand etwas vorstellen. Selbst der ursprüngliche Autor nach einer gewissen Zeit nicht mehr.
Zeichenketten mit ``+`` zusammen zu setzen ist eher BASIC als Python. Idiomatisches Python verwendet zumindest wenn vor und nach einerm Wert noch weitere Zeichenketten kommen eher Zeichenkettenformatierung mittels ``%``-Operator oder `format()`-Methode auf Zeichenketten.
Dein Problem hat nichts mit den Variablen zu tun, sondern das '\t' kein rückwärtsgerichteter Schrägstrich gefolgt von einem kleinen T ist, sondern *ein* Zeichen und zwar das Tabulatorzeichen:
Code: Alles auswählen
In [282]: print 'D:\test'
D: est
In [283]: len('\t')
Out[283]: 1
Pfade sollte man mit den Funktionen im `os.path`-Modul verarbeiten.
Von `os.chdir()` und `os.system()` sollte man die Finger lassen. Das Arbeitsverzeichnis des Prozesses ist ein global gültiger Wert. Den zu verändern skaliert nicht und bei Problemen kann es schnell passieren dass man auf ganz andere Verzeichnisse zugreift, als man eigentlich wollte. Zum Beispiel wenn man an einer Stelle das Arbeitsverzeichnis ändert, Quelltext an andere Stelle aber davon ausgeht, dass es sich nicht verändert (hat). Statt `os.system()` sollte man sich an das `subprocess`-Modul halten.
Namen wie `li` und `pol` sind schlecht. Namen sollten dem Leser die Bedeutung der Werte, die daran gebunden sind, vermitteln. Unter solchen Abkürzungen (?) kann sich niemand etwas vorstellen. Selbst der ursprüngliche Autor nach einer gewissen Zeit nicht mehr.
Zeichenketten mit ``+`` zusammen zu setzen ist eher BASIC als Python. Idiomatisches Python verwendet zumindest wenn vor und nach einerm Wert noch weitere Zeichenketten kommen eher Zeichenkettenformatierung mittels ``%``-Operator oder `format()`-Methode auf Zeichenketten.
- OttoPython
- User
- Beiträge: 47
- Registriert: Montag 23. April 2012, 14:14
hallo liebe user,
danke für eure hilfe
ja die Pfade haben alle existiert
ich hab es jezt mit folgenden code hinbekommen:
ken2 ist dabei eine Eingabe per *_input = ()
li ist ein ausgelesenes String von der Festplatte welches ich als Beschriftung für den Zielordner verwende
beste grüße
Otto
danke für eure hilfe
ja die Pfade haben alle existiert
ich hab es jezt mit folgenden code hinbekommen:
ken2 ist dabei eine Eingabe per *_input = ()
li ist ein ausgelesenes String von der Festplatte welches ich als Beschriftung für den Zielordner verwende
Code: Alles auswählen
os.chdir("Datenuebersicht")
# kopieren auf den Server
ziel = path+"\\Datenuebersicht\*"+ken2+" "+li
print ziel
os.system("copy "+ziel+" ")
Otto
"Im Burnout steckt viel Arbeit drin" -Lysander
Hallo.
Als gelöst wirde ich die Aufgabe mit deinem Programm nicht bezeichnen
Es macht zwar im Moment was du möchtest, aber das ganze Konstrukt steht auf sehr wackeligen Füßen. Du solltest daher unbedingt die Hinweise von /me und BlackJack umsetzen.
Sebastian
Als gelöst wirde ich die Aufgabe mit deinem Programm nicht bezeichnen

Sebastian
Das Leben ist wie ein Tennisball.
Das sieht reichlich selsam aus.
Wie bereits im Thread erwähnt: verwende zum zusammensezen von Pfaden os.path.join.
Warum verwendest fürst du den Copy-Befehl mit System aus? Das kann Python mit eigenen Mitteln.
Und zuletzt: das hier kann eine Batch-Datei auch. Warum der Overhead eines Python-Interpreters?
Wie bereits im Thread erwähnt: verwende zum zusammensezen von Pfaden os.path.join.
Warum verwendest fürst du den Copy-Befehl mit System aus? Das kann Python mit eigenen Mitteln.
Und zuletzt: das hier kann eine Batch-Datei auch. Warum der Overhead eines Python-Interpreters?
Ich würde auch eine Batch Datei erstellen. Viel zu einfach um das mit Python lösen zu müssen.sparrow hat geschrieben:Das sieht reichlich selsam aus.
Wie bereits im Thread erwähnt: verwende zum zusammensezen von Pfaden os.path.join.
Warum verwendest fürst du den Copy-Befehl mit System aus? Das kann Python mit eigenen Mitteln.
Und zuletzt: das hier kann eine Batch-Datei auch. Warum der Overhead eines Python-Interpreters?