tutorial - Überspringt die ersten Zeilen beim Lesen von Zeilen in der Python-Datei




scipy plot csv (6)

Ich möchte die ersten 17 Zeilen beim Lesen einer Textdatei überspringen.

Nehmen wir an, die Datei sieht folgendermaßen aus:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
good stuff

Ich will nur das gute Zeug. Was ich mache, ist viel komplizierter, aber dies ist der Teil, mit dem ich Probleme habe.


Diese Lösung hat mir dabei geholfen, die durch die linetostart Variable angegebene Anzahl von Zeilen zu überspringen. Sie erhalten den Index (int) und die Zeile (String), wenn Sie auch diese verfolgen möchten. In Ihrem Fall ersetzen Sie Linetostart durch 18 oder weisen der Linetostart-Variablen 18 zu.

f = open("file.txt", 'r')
for i, line in enumerate(f, linetostart):
    #Your code

Hier ist eine Methode, um Zeilen zwischen zwei Zeilennummern in einer Datei abzurufen:

import sys

def file_line(name,start=1,end=sys.maxint):
    lc=0
    with open(s) as f:
        for line in f:
            lc+=1
            if lc>=start and lc<=end:
                yield line


s='/usr/share/dict/words'
l1=list(file_line(s,235880))
l2=list(file_line(s,1,10))
print l1
print l2

Ausgabe:

['Zyrian\n', 'Zyryan\n', 'zythem\n', 'Zythia\n', 'zythum\n', 'Zyzomys\n', 'Zyzzogeton\n']
['A\n', 'a\n', 'aa\n', 'aal\n', 'aalii\n', 'aam\n', 'Aani\n', 'aardvark\n', 'aardwolf\n', 'Aaron\n']

Rufen Sie es einfach mit einem Parameter auf, um von Zeile n -> EOF zu gelangen


Sie können ein List-Comprehension verwenden, um daraus einen Einzeiler zu machen:

[fl.readline() for i in xrange(17)]

Weitere Informationen zum Listenverständnis in PEP 202 und in der Python-Dokumentation .


Verwenden Sie itertools.islice , beginnend mit Index 17. Die ersten 17 Zeilen werden automatisch itertools.islice .

import itertools
with open('file.txt') as f:
    for line in itertools.islice(f, 17, None):  # start=17, stop=None
        # process lines

Wenn Sie nicht die gesamte Datei auf einmal in den Speicher lesen möchten, können Sie einige Tricks verwenden:

Mit next(iterator) Sie zur nächsten Zeile vorrücken:

with open("filename.txt") as f:
     next(f)
     next(f)
     next(f)
     for line in f:
         print(f)

Das ist natürlich etwas hässlich, daher bietet itertools eine bessere Möglichkeit, dies zu tun:

from itertools import islice

with open("filename.txt") as f:
    # start at line 17 and never stop (None), until the end
    for line in islice(f, 17, None):
         print(f)

Wenn es ein Tisch ist.

pd.read_table("path/to/file", sep="\t", index_col=0, skiprows=17)





skip