Du bist nicht angemeldet.

Eine Antwort schreiben

Schreibe deinen Beitrag und versende ihn
Beitragsoptionen
Deine Antwort

Zurück

Themen-Übersicht (Neuester Beitrag zuerst)

Photor
02.03.2020 17:02:08

Hallo Schard,

das Problem ist/war, dass - meinem Eindruck nach - die Datenstruktur korrumpiert wird. Indikator war, dass sich Postcodes mehrfach zeigten, obwohl sie nur einmal vorhanden sein sollten.

Ich habe mich heute nochmal tief in das Ganze eingegraben, und - entgegen meiner Erwartung (und eigentlich auch der Doku) sind die Postcodes (je nach Version des Ergebnisfiles) tatsächlich mehrfach vorhanden! (Uuuaaaahhh! Es bleibt kompliziert!) Diese FE-Ergebnisdaten sind leider sehr groß (besser riesig) und unhandlich.

Aber Fakt ist, Python scheint sich erstmal richtig zu verhalten: laut Python-Doku sollte alles solange eingelesen werden, bis der physische (und wohl auch der virtuelle) Speicher ausgeschöpft wird. An der Stelle bin ich jetzt erstmal zufrieden - bis auf die unzureichende Doku; aber das ist kein Problem für hier.

Daher erstmal "Danke!" bis hierher. Nächster Task für mich: "Debugging unter Python".

Ciao,
Photor

schard
02.03.2020 12:32:37

Was ist denn dein konkretes Problem?
Woran machst du fest, dass "Python mit seinen Datenstrukturen durcheinander zu kommen" scheint?

Photor
01.03.2020 19:27:46
schard schrieb:

Du kannst in Python die Datei auch einfach zeilenweise bearbeiten.

with open('/my/file', 'r') as file:
    for line in file:
        <process_line>

So hast du immer nur die aktuelle Zeile im RAM.

Das geht leider nicht, weil die Daten in Blöcken (sogenannten "Postcodes") organisiert sind. Über das einzelne Einlesen solcher Blöcke/Postcodes habe ich mir schon Gedanken gemacht. Aber auch das ist schwierig, weil die benötigten Infos über etliche davon verstreut sind. Das liefe dann auf ein mehrfaches einlesen/scannen des Files hinaus. Das würde ich gerne vermeiden wollen, weil so der ganze Vorgang schon sehr lange dauert (da ist weiterer Handlungsbedarf).

All das wäre nicht nötig, wenn die Python-Schnittstelle des Programmanbieters ordentlich funktionieren würde - dann sogar mit dem (proprietären) Binärformat. Aber, naja ...

Ciao,
Photor

schard
01.03.2020 18:30:14

Du kannst in Python die Datei auch einfach zeilenweise bearbeiten.

with open('/my/file', 'r') as file:
    for line in file:
        <process_line>

So hast du immer nur die aktuelle Zeile im RAM.

Photor
01.03.2020 15:37:14

Hallo Forum,

gleich vorne weg: ich bin nicht sicher, ob ich mit meiner Frage hier (im Forum "Programmierung") richtig bin, ob es vielleicht schon zu Python-spezifisch ist (und daher - wenn überhaupt - in's Cafe sollte). Wenn das so ist, bitte einen kurzen Hinweis und meine Entschuldigung.

Ich muss mit Python große bis sehr große ASCII-Dateien (ca. 3 GB ettliche 100000 Zeilen) bearbeiten. Übliche Vorgehensweise ist, das ganze in ein "StringGrid" (also jede Zeile in einen String; die Strings alle im Speicher über die Zeilennummer direkt ansprechbar) einzulesen; diese kann ich dann durchscannen und mir die Infos raus suchen, die ich brauche.

Für meine kleinen Testdateien und so mittel-große Files funktioniert das auch. Lese ich aber so eine Großdatei ein, scheint mir Python mit seinen Datenstrukturen durcheinander zu kommen. Speichermäßig sehe ich am Rechner selbst nichts auffallendes(*).

Deshalb meine Frage: gibt es bei Python irgendeine Möglichkeit, sich das Speichermanagement anzusehen oder einzugreifen (Speicher freigeben, feststellen, ob Speicherverletzungen vorliegen), wie man es z.B. aus Delphi kennt? (**)


(*) es handelt sich um Ergebnisdateien aus der FE-Rechnung und der Rechner ist entsprechend potent (128 GB). Also physisch sollte genug Speicher vorhanden sein.
(**)Debugging unter Python ist ein Thema, was ich noch ausbauen muss.

Wenn es also hier Python-Programmierer gibt, die mir Tipps geben könnten (auch Hinweise auf gute Doku), wäre ich dankbar.

Ciao,
Photor

Fußzeile des Forums

Powered by FluxBB