2017-09-06 24 views
5

W Pythonie, czytam duży plik i chcę dodać każdą linię (po pewnych modyfikacjach) do pustej listy. Chcę to zrobić tylko w pierwszych kilku liniach, tak zrobiłem:Pojedyncza linia z pliku jest zbyt duża?

X = [] 
for line in range(3): 

    i = file.readline() 
    m = str(i) 
    X.append(m) 

Jednak błąd pojawia się, i mówi, że nie jest MemoryError dla linii i = file.readline().

Co należy zrobić? Jest tak samo, nawet gdy robię zakres 1 (chociaż nie wiem, jak to wpływa na linię, ponieważ jest w pętli).

Jak uzyskać kod błędu? I'm iterating, i nie mogę uczynić z pliku binarnego, ponieważ plik nie jest po prostu liczbą całkowitą - są liczby dziesiętne i nieliczbowe.

Plik txt to 5 występów.

Wszelkie pomysły?

+0

Jak duży jest ten plik? Ile pamięci jest w twoim komputerze? Jak wygląda linia? – birryree

+0

Nie masz wystarczającej ilości pamięci, aby przeczytać wiersz jako pojedynczy ciąg. Dowiedz się, jak możesz przetwarzać plik w krótkim czasie i nie przechowywać go w pamięci. – Blender

+3

Jakiej konwencji zakończenia linii używa twój plik? Wygląda na to, że otrzymujesz błąd, ponieważ 'readline' nie znajduje oczekiwanego końca linii i nie odczytuje całego pliku w pamięci. – chepner

Odpowiedz

4

filehandle.readline() przerwy przez linie znaku nowej linii (\n) - jeśli plik ma gigantyczne linie lub brak nowych linii w ogóle, trzeba wymyślić inny sposób wyrwy go.

Zazwyczaj można czytać plik w porcjach i przetwarzać te porcje jeden po drugim.

Czy możesz dowiedzieć się, jak możesz zepsuć plik? Czy mógłbyś, na przykład, przeczytać tylko 1024 bajty na raz i pracować z tym kawałkiem?

Jeśli nie, to często łatwiej jest wyczyścić format pliku, zamiast projektować skomplikowany czytnik.

Powiązane problemy