Seite 1 von 1

Größere Datei kopieren ohne sleep

Verfasst: Freitag 21. November 2008, 06:53
von oshoki
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

Verfasst: Freitag 21. November 2008, 07:38
von nemomuk
os.wait()
(Außerdem wäre subprocess besser im Vergleich zu os)
Aber warum verwendest du nicht das shutil Modul?

Re: Größere Datei kopieren ohne sleep

Verfasst: Freitag 21. November 2008, 08:13
von Zap
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.

Verfasst: Freitag 21. November 2008, 11:51
von Leonidas
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.

Verfasst: Freitag 21. November 2008, 23:54
von oshoki
Super, das hilft mir weiter. Vielen Dank

Verfasst: Samstag 22. November 2008, 10:00
von roschi
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]

Verfasst: Samstag 22. November 2008, 10:25
von lunar
@roschi
os.path.dirname() existiert.

Verfasst: Samstag 22. November 2008, 11:38
von roschi
@lunar:
das hilft mir aber in meinem beispiel nicht wirklich weiter.
ich moechte ja den dateinamen, und nicht den verzeichnisnamen. :)

lg
roschi

Verfasst: Samstag 22. November 2008, 11:39
von Leonidas
roschi hat geschrieben:ich moechte ja den dateinamen, und nicht den verzeichnisnamen. :)
Es gibt auch ``os.path.basename``.

Verfasst: Samstag 22. November 2008, 11:48
von 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.