ich finde das Thema gerade spannend und habe mal vier Wege getestet, wie man eine bestimme Zeile in der Koordinaten-Datei auslesen kann und habe auch dazu die Zeiten gestoppt.
Das Ergebnis ist:
- Mit pandas dauert es am längsten.
- Die Suchdauer hängt wesentlich ab von
-- der Position, an der sich die gesuchte Zeilennummer befindet
-- ob pandas oder itertools verwendet werden
Bsp.:
Pandas vs. itertools
Datei: 8.000.000 Zeilen, letzte Zeile suchen: 12 sec vs. 1,08 sec
Datei: 8.000.000 Zeilen, 4.000.000. Zeile suchen: 12 sec vs. 0,55 sec
Vor dem Programmlauf habe ich jeweils den Kernel neu gestartet.
Natürlich kommt es immer darauf an, was man später mit den Daten machen will. Aber ein DataFrame mit pandas zu erzeugen, wenn man „nur“ eine Zeile braucht, scheint mir mit Kanonen auf Sparten zu schießen, oder?
Die in den Programmen angegebenen Zeiten (im Kommentar) beziehen sich auf die Suche der letzten Zeile in einer 4.000.000 Zeilen großen Datei.
Code: Alles auswählen
with open ("Koordinaten.txt","w") as outputfile:
for i in range (0,4000000):
print("2624000.25 1133999.75 1121.99",file=outputfile)
Code: Alles auswählen
from time import time
import pandas as pd
# pandas Version 0.23.4
t1 = time()
df = pd.read_csv('Koordinaten.txt',delimiter=" ",header=None)
print (df.iloc[[399999],:])
print (time()-t1)
# t=6.094815254211426
Code: Alles auswählen
from itertools import islice
from time import time
t1 = time()
with open ("Koordinaten.txt","r") as file:
print (list(islice(file,3999998,3999999,)))
#print (str(l))
file.close()
print (time()-t1)
#t=0.556002140045166
Code: Alles auswählen
from time import time
t1 = time()
with open ("Koordinaten.txt","r") as file:
n=0
for line in file:
n +=1
if n == 3999999:
print(line,end="")
file.close()
print (time()-t1)
#t=0.8531761169433594
Code: Alles auswählen
from time import time
t1 = time()
with open("Koordinaten.txt","r") as file:
for n, value in enumerate(file):
if n == 3999999:
print (value, end="")
file.close()
print (time()-t1)
#t=0.8580334186553955