Do odczytu pliku CSV używam języka Python (Django Framework). Jak widzisz, wyciągam tylko 2 linie z tego pliku CSV. To, co próbowałem zrobić, to przechowywać w zmiennej całkowitą liczbę wierszy również w pliku CSV.
Jak mogę uzyskać całkowitą liczbę wierszy?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
data.append(fileObject.next())
Próbowałem:
len(fileObject)
fileObject.length
file_read
? Czy to uchwyt pliku (jak wfile_read = open("myfile.txt")
?Odpowiedzi:
Musisz policzyć liczbę wierszy:
Użycie
sum()
z wyrażeniem generatora zapewnia efektywny licznik, unikając przechowywania całego pliku w pamięci.Jeśli na początku przeczytałeś już 2 wiersze, musisz dodać te 2 wiersze do sumy; wiersze, które zostały już odczytane, nie są liczone.
źródło
\x1A
)? Jak otworzyłeś plik?file.seek(0)
wtedyfileObject = csv.reader(file)
2018-10-29 EDYCJA
Dziękuję za komentarze.
Przetestowałem kilka rodzajów kodu, aby uzyskać liczbę wierszy w pliku csv pod względem szybkości. Najlepsza metoda jest poniżej.
Oto testowany kod.
Wynik był poniżej.
Podsumowując,
sum(1 for line in f)
jest najszybszy. Ale może nie być znaczącej różnicy w stosunku dolen(f.readlines())
.sample_submission.csv
ma 30,2 MB i 31 milionów znaków.źródło
for row in csv_reader:
rozwiązanie, gdy CSV ma zawierać prawidłowe cytowane znaki nowej linii zgodnie z rfc4180 . @dixhom jak duży był testowany plik?Aby to zrobić, potrzebujesz trochę kodu, takiego jak mój przykład tutaj:
Mam nadzieję, że to pomoże wszystkim.
źródło
%time sum(1 for row in open("df_data_raw.csv"))
koszt 4,91 s, a%time len(open("df_data_raw.csv").readlines())
koszt 14,6 s.Kilka z powyższych sugestii liczy liczbę LINII w pliku csv. Ale niektóre pliki CSV będą zawierać cytowane ciągi, które same zawierają znaki nowej linii. Pliki MS CSV zwykle oddzielają rekordy znakiem \ r \ n, ale używają samego \ n w obrębie cudzysłowów.
W przypadku takiego pliku zliczanie wierszy tekstu (rozdzielonych znakiem nowej linii) w pliku da zbyt duży wynik. Aby uzyskać dokładne zliczanie, musisz użyć csv.reader do odczytania rekordów.
źródło
Najpierw musisz otworzyć plik za pomocą open
Następnie użyj csv.reader, aby otworzyć plik csv
Na koniec możesz wziąć numer wiersza z instrukcją „len”
Całkowity kod jest następujący:
Pamiętaj, że jeśli chcesz ponownie użyć pliku csv, musisz utworzyć plik input_file.fseek (0), ponieważ gdy używasz listy dla reader_file, czyta cały plik, a wskaźnik w pliku zmienia swoją pozycję
źródło
row_count = sum(1 for line in open(filename))
pracował dla mnie.Uwaga:
sum(1 for line in csv.reader(filename))
wydaje się, że oblicza długość pierwszej liniiźródło
źródło
file_read
widoczniecsv.reader()
obiektu, więc nie ma sięreadlines()
metodę..readlines()
musi utworzyć potencjalnie dużą listę, którą następnie ponownie odrzucasz.kiedy tworzysz instancję obiektu csv.reader i wykonujesz iterację całego pliku, możesz uzyskać dostęp do zmiennej instancji o nazwie line_num, podając liczbę wierszy:
źródło
źródło
Użyj „listy”, aby dopasować bardziej działający obiekt.
Możesz wtedy liczyć, przeskakiwać, mutować do woli:
źródło
Działa to dla csv i wszystkich plików zawierających ciągi znaków w systemach operacyjnych opartych na Uniksie:
W przypadku, gdy plik csv zawiera wiersz pól, możesz odjąć jeden z
numOfLines
powyższych:źródło
Możesz także użyć klasycznej pętli for:
źródło
może chcieć wypróbować coś tak prostego, jak poniżej w wierszu poleceń:
sed -n '$=' filename
lubwc -l filename
źródło
Myślę, że możemy trochę poprawić najlepszą odpowiedź, używam:
Co więcej, nie powinniśmy zapominać, że kod Pythona nie zawsze ma najlepszą wydajność w projekcie. Na przykład: Jeśli możemy wykonać więcej operacji w tym samym czasie w tym samym zbiorze danych, lepiej zrobić wszystko w tym samym jądrze, zamiast tego zrobić dwie lub więcej pythonowych kostek.
źródło
źródło
próbować
a na wyjściu można zobaczyć coś takiego jak (aa, bb), gdzie aa to liczba wierszy
źródło
data.shape[0]