File per For-Schleife überschreiben (Timeroptimierung)

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.
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

File per For-Schleife überschreiben (Timeroptimierung)

Beitragvon keboo » Mittwoch 26. April 2006, 09:08

Hallo Leute!

In meinem Skript werden in einer For Schleife Daten von unterschiedlicher Größe immer wieder in ein Zwischenfile gespeichert, dass bei jedem Durchgang überschrieben wird.

Die For Schleife ist aber schneller, als die Festplattengeschwindigkeit offensichtlich.

Gibt es eine elegantere Methode als mit einem Timer

Code: Alles auswählen

time.sleep(0.4)
zu arbeiten? Wie kann ich prüfen, ob das Zwischenfile auf die Platte geschrieben wurde?

Weil die Zwischenfiles in der Größe variieren, wäre eine dynamische Optimimierung toll.

Danke,

Johannes
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Beitragvon querdenker » Mittwoch 26. April 2006, 12:07

Hi keboo,
du kannst das schreiben erzwingen.

Code: Alles auswählen

fh=file('/path/to/file','wa+')
fh.write(somedata)
fh.flush()

#Ende des Programmes
fh.close()


mfg, querdenker
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Beitragvon keboo » Mittwoch 26. April 2006, 12:19

Hi querdenker!

Leider funktioniert das noch nicht so ganz in meinem Skript.

Mit welchem Befehl kann ich die Schleife so lange stoppen, bis die Datei auf der Festplatte sicher überschrieben ist?


Danke.

Johannes
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Mittwoch 26. April 2006, 12:48

mit 'flush' leerst du die Zwischenablage, wenn die Dateien nicht mehr gebraucht werden. Ich sehe das als Lösung an, weil wenn sie nicht mehr gebraucht werden, eigentlich schon geschrieben sein sollten.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 26. April 2006, 12:52

Hi,

mir ist ehrlich gesagt Dein Problem nicht klar - bzw. ob Dein Lösungsansatz tatsächlich die Lösung für Dein Problem ist. Was willst Du denn genau machen? Gleichzeit aus einer Datei Daten lesen und in dieselbe Datei schreiben? Das ist in den seltensten Fällen wirklich clever. Vielleicht hilft Dir das tempfile Modul weiter. Eine Möglichkeit wäre womöglich Deine Daten einzulesen, sie zu verwursten, in ein Tempfile auszulagern und am Ende der Schleife Deine ursprüngliche Datei mit dem Tempfile zu ersetzen - aber ehrlich gesagt, bin ich nicht sicher, ob das ein wirklich besserer Ansatz ist.

Ansonsten ist querdenkers Lösung eigentlich schon nicht schlecht. Du sagst das funktioniert bei Dir nicht. Warum nicht? Magst Du mal Beispielcode inkl. Besschreibung, was er genau tun soll, geben? Dann entfällt das Raten. ;-)

Gruß,
Christian
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 26. April 2006, 15:05

CM hat geschrieben:Vielleicht hilft Dir das tempfile Modul weiter.

Vielleicht auch StringIO, welches Dateien im Speicher "emuliert" (somit keine Shcreib und Lesezugriffe auf der Festplatte nötig). Aber wie CM schon sagte, wir können nur raten.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Beitragvon keboo » Mittwoch 26. April 2006, 16:16

Danke für eure Antworten.

Der Fehler in meinem Skript war, dass ich einen Subprocess über POPEN aufgerufen habe. Dieser Befehl öffnet anscheinend den Prozess nur, ohne zu achten, ob er auch wieder geschlossen wird. CALL hatt mein Problem gelöst.

Danke,

Johannes
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 26. April 2006, 17:20

Hoi Johannes,

tut mir leid, aber das reizt mich doch noch zu einer Antwort: Vielleicht magst Du beim nächsten mal doch etwas Code und eine detaillierte Problembeschreibung rausrücken? Das könnte womöglich schneller zum Ziel führen ... :wink:

Besten Gruß,
Christian
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Beitragvon keboo » Donnerstag 27. April 2006, 08:36

Normalerweise "rück" ich eh mit Code heraus. Das Problem ist aber, dass dieser schon 300 Zeilen lang ist und ich das euch nicht antun wollte.

Zudem hätte ich auch den falschen Code euch gezeigt, da ich von Anfang an das Problem an einer anderen Stelle vermutete.

Danke trotzdem für eure Bemühungen.

Ich kann eure Tipps trotzdem anwenden.

Python ist echt toll muss ich sagen.

LG
johannes

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]