Seite 1 von 1
Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 16:58
von Killver
Hallo!
Ich versuche derzeit in python ein 13GB großes File zeilenweise auszulesen.
Es funktioniert auch prächtig, jedoch sagt er mir dass es nur 1124259 Zeilen gibt. Es müssen aber definitiv mehr sein. Ich kann es leider nicht genau überprüfen, aber es sollten laut Veröffentlichung des files 97 Millionen Zeilen sein.
Hat hier wer ne Idee was schief laufen könnte?
lg
Philipp
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 17:06
von rads
Hallo,
etwas vergleichbares gabs schonmal vor ein paar Wochen und woran es eventuell liegen könnte ist, dass
wenn du auf einem 32 Bit System entwickelst bzw. deine Python Runtime eine solche ist, du eine
Speicherbegrenzung pro Prozess von 2 GB (unter Windows) hast. D.h. ein windows Prozess bekommt
standardmässig nur 2 GB virtuell address-space mit dem er arbeiten kann.
Aber um sowas zu entscheiden müsste man wissen wo die Zeilen eingelesen werden und ob so die
Speicherstrukturen an eine Grenze stoßen.
An sich sollte auch eine Exception kommen, welche evtl. verschluckt wird?
Grüße
stefan
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 17:18
von BlackJack
@Killver: Ohne Quelltext kann man da nicht viel sagen. Vielleicht ist ja auch was mit der Berechnung der Zeilenanzahl falsch!? "Er sagt"? Wer und wie kommt "er" zu der Zeilenanzahl?
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 17:20
von Killver
Es handelt sich um einen twitter Datensatz der definitiv laut Veröffentlichung 97 Millionen zeilen haben muss.
Ich arbeite mit einer 32bit evrsion von python.
Folgenden Code verwende ich:
Code: Alles auswählen
f = file("twitterStream.data", "r")
for line in f:
do something
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 17:25
von BlackJack
@Killver: Und wo wird da eine Zeilenanzahl ausgegeben? Bzw. was lässt Dich an der Ausgabe dieses Programms vermuten es war nicht alles?
Wohin lässt Du ausgeben?
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 17:31
von Killver
Ich lasse in die konsole ausgeben. Er liest definitiv zu wenig ein. merke ich auch beim speichern in eine Datenbank.
habe jetzt übrigends die Bestätigung:
über die Dos Konsole zeilen gezählt:
---------- C:\TWITTERSTREAM.DATA:
96371836
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 17:55
von Barabbas
Ich habe gerade mal eine Datei mit 99.999.999 (kurzen) Zeilen erstellt. Die werden ohne Probleme eingelesen - was ja auch zu erwarten war, da beim Iterieren über die Zeilen nicht der Speicher vollgemüllt wird (also ich lasse nur drüberlaufen und einen Zähler hochzählen).
Kurzum: Muss etwas in deinem Code sein - den du uns ja leider vorenthalten hast.
Gruß,
brb
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 17:58
von Killver
ich habe meinen Code ja schon gepsotet
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 18:00
von jbs
Dann solltest du aber einen Syntaxfehler bekommen.
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 18:10
von Killver
Code: Alles auswählen
linectr = 0
for line in open("twitter_stream.data", "r"):
linectr += 1
print linectr
f.close()
Das wäre der ganze Code. mehr geschieht nicht.
Ich evrsuche gerade die Files zu splitte (derzeit auf 100mb parts) Aber er bekommt immer noch nicht die richtige Zeilenanzahl

Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 18:14
von BlackJack
@Killver: Was ist denn in der Datei enthalten? Können da auch "Binärdaten" in den Zeilen vorkommen? Bei Windows gibt es nämlich einen Bytewert, den dieses tolle Betriebssystem als Endkennzeichen für Textdateien interpretiert.
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 18:18
von Killver
Oh wie wäre denn dieser Bytewert?
Falls dieser irgendwo in der Datei sein sollte (was leicht sien kann), wie könnte ich das umgehen?
Es sind eigentlich nur Textzeilen vorhanden.
habe jetzt geschaut wo er sagt dass das file aus is: Im texteditor steht ein "SUB"
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 19:09
von jbs
Ändert es was, wenn du das file mit rb öffnest?
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 19:56
von Killver
Das wars tatsächlich... nun funktionierts, danke
Hätte ich mir 5 studnen herumprobieren sparen können ^^
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 20:49
von /me
jbs hat geschrieben:Ändert es was, wenn du das file mit rb öffnest?
Es ist schon pervers Binärdateien zeilenweise zu lesen, aber wenn's dann jetzt funktioniert soll es recht sein.
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 21:43
von Killver
Im grunde is es ja keine Binärdatei sondern nur Text, aber anscheinend haben sich Binärelemente darin evrsteckt. jetzt liest er jedenfalls alle Zeilen ein. Danke nochmals!
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 21:50
von sma
Killver hat geschrieben:Im grunde is es ja keine Binärdatei sondern nur Text, aber anscheinend haben sich Binärelemente darin evrsteckt. jetzt liest er jedenfalls alle Zeilen ein. Danke nochmals!
DOS/Windows reagiert eigentlich nur allergisch auf ^Z (ASCII 26) ein Überbleibsel aus CP/M. Eigentlich wundert es mich, dass Python das noch beachtet, denn AFAIK können sich DOS/Windows-Programme bei Dateioperationen aussuchen, ob sie CP/M-kompatibel sein wollen oder nicht.
Stefan
Re: Sehr großes File lesen
Verfasst: Mittwoch 14. Juli 2010, 22:35
von BlackJack
@sma: Python benutzt einfach die entsprechenden Funktionen aus der C-Standardbibliothek. Und bei denen verhält sich Windows halt so.
Re: Sehr großes File lesen
Verfasst: Donnerstag 15. Juli 2010, 15:22
von Hyperion
BlackJack hat geschrieben:@sma: Python benutzt einfach die entsprechenden Funktionen aus der C-Standardbibliothek. Und bei denen verhält sich Windows halt so.
Also ist das ein spezifisches CPython-Problem? Wäre ja da mal interessant, ob sich dort Jython z.B. anders verhält
