Größere Datei kopieren ohne sleep

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
oshoki
User
Beiträge: 30
Registriert: Donnerstag 3. Januar 2008, 22:49

Ich kopiere eine größere Datei (relativ) von einem fileshare auf meinen lokalen Rechner. Das benötigt etwas Zeit. Jetzt muss ich dem Kopiervorgang etwas Zeit einräumen und warten, bis ich mit dem Programm fortfahren kann, sonst gibt es Fehlermeldung, wenn ich mit der importierten Datei arbeiten will und die noch nicht ganz zur Verfügung steht.

Ein paar Fragen hätte ich gerne beantwortet:
Momentan verwende ich einen Buchstaben, um auf den fileshare zu gelangen. Wie gebe ich den Fileshare explizit an?

Code: Alles auswählen

# Arbeitsverzeichnis
cdir = os.getcwd()

# Kopieren der Quelldateien vom Exportlaufwerk e:\ in das
# Arbeitsverzeichnis
copy_file = "copy e:\\*.dat "+ cdir
trans = os.popen(copy_file)

# Schlafen, um dem Kopiervorgang Zeit zu geben
time.sleep(5)
Gibt es eine elegantere Möglichkeit als os.popen(copy_file) ?
Wie umgehe ich das time.sleep() ? Gibt es sowas wie file exist oder so?

Vielen Dank im Voraus
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

os.wait()
(Außerdem wäre subprocess besser im Vergleich zu os)
Aber warum verwendest du nicht das shutil Modul?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

oshoki hat geschrieben: Wie umgehe ich das time.sleep() ? Gibt es sowas wie file exist oder so?
Ja: os.path.exists()
Es gibt noch weitere wie "os.path.isdir()" und "os.path.isfile()"

Wie SchneiderWeisse schon sagte. Schau dir mal das Modul shutil an.
Das macht das Leben leichter.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

OMG!

Aber da eh schon alle am Tipp-geben sind: Verwende für Pfade unter Windows Raw-Strings, dann musst du die Backslashes nicht escapen und kannst sie einfach so schreiben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
oshoki
User
Beiträge: 30
Registriert: Donnerstag 3. Januar 2008, 22:49

Super, das hilft mir weiter. Vielen Dank
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

und hier noch ein kleines beispiel:

Code: Alles auswählen

import glob, os, shutil

for item in glob.glob(r"E:\*.dat")
    shutil.copyfile(item, os.path.basename(item))
lg
roschi

[edit]
code verbessert - danke an lunar & Leonidas
[/edit]
Zuletzt geändert von roschi am Samstag 22. November 2008, 14:20, insgesamt 1-mal geändert.
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
lunar

@roschi
os.path.dirname() existiert.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

@lunar:
das hilft mir aber in meinem beispiel nicht wirklich weiter.
ich moechte ja den dateinamen, und nicht den verzeichnisnamen. :)

lg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

roschi hat geschrieben:ich moechte ja den dateinamen, und nicht den verzeichnisnamen. :)
Es gibt auch ``os.path.basename``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

roschi hat geschrieben:@lunar:
das hilft mir aber in meinem beispiel nicht wirklich weiter.
ich moechte ja den dateinamen, und nicht den verzeichnisnamen. :)
Mein Fehler, ich hatte den Index nicht richtig interpretiert. Leonidas, danke für die Korrektur.
Antworten