ubuntuusers.de

python: die gleiche zeile mit readlines() zweimal einlesen??

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

pyro

Avatar von pyro

Anmeldungsdatum:
29. August 2007

Beiträge: 213

Ich möchte unter bestimmten Umständen ein Zeile zweimal einlesen,
ohne die ganze Datei von vorne einlesen zu müssen,

ich hab auch schon gegoogelt, kann aber nix entsprechendes finden.
Weiß hier jemand wie das geht, oder ob das möglich ist??

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

readlines`` gibt eine Liste aller Zeilen zurück. Insofern liegen die Zeilen eh schon im Speicher, zufälliger Zugriff sollte also problemlos möglich sein. Allerdings ist es meistens nicht nötig, eine Datei komplett in den Speicher zu laden. Ich würde dich bitten, einfach mal zu erklären, was du eigentlich machen möchtest, dann findet sich vielleicht eine passendere Lösung ;)

pyro

(Themenstarter)
Avatar von pyro

Anmeldungsdatum:
29. August 2007

Beiträge: 213

hi lunar,
hups hab auch readline() benutzt nicht readlines().

das Ganze sieht bis jetzt ungefähr so aus:

cur=stdin.readline()
if not cur:
function() # schreibt neue zeilen in die stdin-datei
cur=nochmal die gleiche zeile wie oben nur mit dem jetzt vorhandene wert

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Uh? Du möchtest auf die Standard*eingabe* eines Programms schreiben?

pyro

(Themenstarter)
Avatar von pyro

Anmeldungsdatum:
29. August 2007

Beiträge: 213

neee \^^
stdin benutze ich nur meist als Variable für:
open("pfad","r")
und stdout für:
open("pfad","w oder a .....")

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Ach so 😉 ("stdin" steht aber eigentlich für "standard input" 😉 ).

Trotzdem werde ich nicht ganz schlau aus der Sache. Du liest aus einer Datei, die zum *Lesen* geöffnet ist, eine Zeile, veränderst diese, willst diese zurückschreiben, und anschließend neu lesen? Ganz abgesehen davon, dass man in zum Lesen geöffnete Dateien nicht schreiben kann, ist der ganze "Workflow" komisch.

Wieso bindest du die geänderten Zeile nicht an einen Namen, dann musst du da nichts neu einlesen?

pyro

(Themenstarter)
Avatar von pyro

Anmeldungsdatum:
29. August 2007

Beiträge: 213

ich öffne diese datei natürlich auch zum schreiben wieder \^^

ich glaub ich muss mal genauer erklären was ich will.

ich schreibe eine Function, die mir möglichst schnell eine Zahl
in seine Primfaktoren zerlegen soll,
jetzt finde ichs aber sehr unperformant, wenn für jede Zahl neu großartig gerechnet werden muss,
also schmeiße ich "if not cur:" meinen Primzahlengenerator an, der mir von der Primzahl an, die noch nicht bekannt ist,
bis zur hälfte der Zahl die ich errechnen will die Primzahlen hinten an die Datei dranschreibt.

dieser spezielle Fall soll also nur selten in Kraft treten, und danach nicht nochmal für die Zahlen gemacht werden müssen,
die kleiner sind als die höchste bisher zerlegte Zahl.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Dann lies die Datei ein, arbeite damit *im* Speicher und schreibe die Datei am Ende wieder raus.

Für die Speicherung bekannter Zahlen nutzt du dann ein entsprechende Datenstruktur (z.B. ``set``).

pyro

(Themenstarter)
Avatar von pyro

Anmeldungsdatum:
29. August 2007

Beiträge: 213

super,
daran hab ich überhaupt nicht gedacht lol
Damit hat sich dass dann erledigt, vielen lieben dank

so und ich leg mich jetzt ins Bett,
muss morgen nochmal raus vor dem langen Wochenende 😇
gnacht

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Ebenfalls 😉 (Ich hab Urlaub, ich darf länger 😉 )

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4668

Wohnort: Berlin

<OT>
@lunar: Das random in random access würde ich nicht mit zufällig, sondern mit wahlfrei übersetzen. Also wahlfreier Zugriff.
</OT>

Antworten |