Sprawdziłem this, this i this.Python - odczytanie 1000 wierszy z pliku na raz
Trzecie łącze wydawało się mieć odpowiedź, ale nie wykonało zadania.
Nie mogę znaleźć rozwiązania, w którym cały plik zostanie przeniesiony do głównej pamięci, ponieważ pliki, z którymi będę pracował będą bardzo duże. Dlatego zdecydowałem się użyć islice
, jak pokazano w trzecim linku. Pierwsze 2 linki były nieistotne, ponieważ wykorzystywały je tylko w 2 liniach lub odczytały 1000 znaków. Podczas gdy potrzebuję 1000 linii.for now N is 1000
Mój plik zawiera linie:
Próbka:
1 1 1
1 2 1
1 3 1
1 4 1
1 5 1
1 6 1
1 7 1
1 8 1
1 9 1
1 10 1
Więc jeśli czytam 1000 linii na raz, muszę przejść przez while
1000
razy , ale kiedy wydrukuję p
, aby sprawdzić, ile razy byłem w stanie, to nie zatrzyma się na 1000
. Po uruchomieniu mojego programu na 19038838
osiągnąłem 1400
sekund !!
KOD:
def _parse(pathToFile, N, alg):
p = 1
with open(pathToFile) as f:
while True:
myList = []
next_N_lines = islice(f, N)
if not next_N_lines:
break
for line in next_N_lines:
s = line.split()
x, y, w = [int(v) for v in s]
obj = CoresetPoint(x, y)
Wobj = CoresetWeightedPoint(obj, w)
myList.append(Wobj)
a = CoresetPoints(myList)
client.compressPoints(a) // This line is not the problem
print(p)
p = p+1
c = client.getTotalCoreset()
return c
Co robię źle?
Opcja 'f' prawdopodobnie nie zużytą więc skończyć się czyta te same i same linie za każdym razem 1000 . To się nigdy nie skończy. Musisz użyć alternatywnego sformułowania dla 'islice' (' itertools.islice (iterable, start, stop [, step]) 'this a nie' itertools.islice (iterable, stop) 'this) –