Mam plik, w którym wiersze są rozdzielane przy użyciu ogranicznika powiedz: .
. Chcę czytać ten plik wiersz po wierszu, gdzie linie powinny być oparte na obecności .
zamiast linii nowej.Odczytywanie pliku z określonym separatorem dla nowej linii
Jednym ze sposobów jest:
f = open('file','r')
for line in f.read().strip().split('.'):
#....do some work
f.close()
Ale to nie jest pamięć wydajny jeśli mój plik jest zbyt duży. Zamiast czytać cały plik razem, chcę go czytać wiersz po wierszu.
open
obsługuje parametr "nowa linia", ale ten parametr przyjmuje tylko None, '', '\n', '\r', and '\r\n'
jako dane wejściowe, jak wspomniano here.
Czy istnieje sposób na wydajne odczytanie linii plików, ale na podstawie wcześniej określonego ogranicznika?
Kudos @NPE! Prosty i działa jak urok. –
Można nieco uprościć, zmieniając początek zewnętrznej pętli na 'for chunk in iter (functools.partial (f.read, 4096), ''): buf + = chunk' i dodając' if buf: yield buf' po pętli (nie w środku). – Harvey