Ich suche nach einer Methode in Python, die mehrere Zeilen aus einer Datei lesen kann (10 Zeilen gleichzeitig). Ich habe bereits readlines(sizehint)
untersucht. Ich habe versucht, den Wert 10 zu übergeben, aber nicht nur 10 Zeilen gelesen. Es liest tatsächlich bis zum Ende der Datei (ich habe die kleine Datei anprobiert). Jede Zeile ist 11 Bytes lang und jeder Lesevorgang sollte jedes Mal 10 Zeilen abrufen. Wenn weniger als 10 Zeilen gefunden werden, geben Sie nur diese Zeilen zurück. Meine eigentliche Datei enthält mehr als 150K Zeilen.
Irgendeine Idee, wie ich das erreichen kann?
4 Antworten
Sie suchen nach itertools.islice()
:
with open('data.txt') as f:
lines = []
while True:
line = list(islice(f, 10)) #islice returns an iterator ,so you convert it to list here.
if line:
#do something with current set of <=10 lines here
lines.append(line) # may be store it
else:
break
print lines
from itertools import groupby, count
with open("data.txt") as f:
groups = groupby(f, key=lambda x,c=count():next(c)//10)
for k, v in groups:
bunch_of_lines = list(v)
print bunch_of_lines
Eine andere Lösung, mit der die dumme Endlosschleife zugunsten einer bekannteren for
- Schleife beseitigt werden kann, basiert auf itertools.izip_longest
und einem kleinen Trick mit Iteratoren. Der Trick ist, dass zip(*[iter(iterator)]*n)
iterator
in Stücke der Größe n zerlegt. Da eine Datei bereits ein generatorähnlicher Iterator ist (im Gegensatz zu einer sequenzähnlichen), können wir schreiben:
from itertools import izip_longest
with open('data.txt') as f:
for ten_lines in izip_longest(*[f]*10,fillvalue=None):
if ten_lines[-1] is None:
ten_lines = filter(ten_lines) #filter removes the `None` values at the end
process(ten_lines)
Das sollte es tun
def read10Lines(fp):
answer = []
for i in range(10):
answer.append(fp.readline())
return answer
Oder das Listenverständnis:
ten_lines = [fp.readline() for _ in range(10)]
In beiden Fällen fp = open('path/to/file')
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.