Mamy duży plik nieprzetworzonych danych, który chcielibyśmy przyciąć do określonego rozmiaru. Mam doświadczenie w .net C #, jednak chciałbym to zrobić w Pythonie, aby uprościć i zaciekawić.
Jak zabrać się do uzyskania pierwszych N wierszy pliku tekstowego w Pythonie? Czy używany system operacyjny będzie miał jakikolwiek wpływ na implementację?
Odpowiedzi:
Python 2
Python 3
Oto inny sposób (zarówno Python 2, jak i 3)
źródło
źródło
f = open("file")
bez wyjątku obsługę zamykania pliku. Pythonowym sposobem obsługi plików jest użycie menedżera kontekstu, tj. Użycie instrukcji with. Jest to omówione w samouczku Pythona z danymi wejściowymi ."It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way."
Jeśli chcesz szybko przeczytać pierwsze wiersze i nie zależy Ci na wydajności, możesz użyć funkcji,
.readlines()
która zwraca obiekt listy, a następnie wyciąć listę.Np. Dla pierwszych 5 linii:
Jedną z zalet w porównaniu z innymi odpowiedziami jest możliwość łatwego wyboru zakresu linii, np. Pomijanie pierwszych 10 wierszy
[10:30]
lub ostatnich 10 wierszy[:-10]
lub branie tylko parzystych wierszy[::2]
.źródło
To, co robię, to wywoływać linie N za pomocą
pandas
. Myślę, że wykonanie nie jest najlepsze, ale np. JeśliN=1000
:źródło
nrows
opcji, którą można ustawić na 1000, a cały plik nie jest ładowany. pandas.pydata.org/pandas-docs/stable/generated/... Ogólnie pandy mają tę i inne techniki oszczędzania pamięci dla dużych plików.sep
aby zdefiniować ogranicznik kolumny (który nie powinien występować w pliku innym niż CSV)pandas.read()
funkcji w dokumentacji, czy znasz jakieś informacje na ten temat?Nie ma określonej metody odczytywania liczby wierszy ujawnionych przez obiekt pliku.
Myślę, że najłatwiejszym sposobem byłoby wykonanie następujących czynności:
źródło
Na podstawie odpowiedzi gnibbler najczęściej głosowanych (20 listopada 2009 o godzinie 0:27): ta klasa dodaje metody head () i tail () do obiektu pliku.
Stosowanie:
źródło
Oto dwa najbardziej intuicyjne sposoby:
Iteruj po pliku wiersz po wierszu i
break
poN
wierszach.Iteruj na pliku wiersz po wierszu, używając czasów
next()
metodyN
. (Zasadniczo jest to po prostu inna składnia tego, co robi pierwsza odpowiedź).Oto kod:
Najważniejsze jest to, że jeśli nie używasz
readlines()
lub nieenumerate
zapisujesz całego pliku w pamięci, masz wiele opcji.źródło
najbardziej wygodny sposób we własnym zakresie:
Rozwiązanie oparte na zrozumieniu listy Funkcja open () obsługuje interfejs iteracyjny. Enumerate () obejmuje open () i zwracające krotki (indeks, element), następnie sprawdzamy, czy znajdujemy się w akceptowanym zakresie (jeśli i <LINE_COUNT), a następnie po prostu drukujemy wynik.
Ciesz się Pythonem. ;)
źródło
[next(file) for _ in range(LINE_COUNT)]
.W przypadku pierwszych 5 linii po prostu wykonaj:
źródło
Jeśli chcesz czegoś, co oczywiście (bez szukania ezoterycznych rzeczy w podręcznikach) działa bez importu i spróbuj / z wyjątkiem i działa na sporej liczbie wersji Pythona 2.x (2.2 do 2.6):
źródło
Jeśli masz naprawdę duży plik i zakładając, że chcesz, aby wynik był tablicą numpy, użycie np.genfromtxt spowoduje zawieszenie komputera. Z mojego doświadczenia wynika o wiele lepiej:
źródło
Począwszy od Pythona 2.6, możesz skorzystać z bardziej wyrafinowanych funkcji w podstawowej klasie IO. Zatem najwyżej ocenianą odpowiedź powyżej można przepisać jako:
(Nie musisz się martwić, że plik ma mniej niż N wierszy, ponieważ nie jest zgłaszany żaden wyjątek StopIteration).
źródło
lines
ale argument odnosi się dobytes
.To zadziałało dla mnie
źródło
Działa to dla Pythona 2 i 3:
źródło
źródło
Ta metoda zadziałała dla mnie
źródło