在读取Python文件中的行时跳过第一行

我想在阅读文本文件时跳过前面的17行。

假设文件如下所示:

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

我只想要好东西。 我所做的事情要复杂得多,但这是我遇到的一个麻烦。

使用一个切片,如下所示

 with open('yourfile.txt') as f: lines_after_17 = f.readlines()[17:] 

如果文件太大,无法加载到内存中:

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

这个解决scheme帮助我跳过由linetostartvariables指定的行数。 如果你想跟踪这些,你可以得到index(int)和line(string)。 在你的情况下,你用18代替linetostart,或者把18代入linetostartvariables。

 f = open("file.txt", 'r') for i, line in enumerate(f, linetostart): #Your code 
 for line in dropwhile(isBadLine, lines): # process as you see fit 

完整演示:

 from itertools import * def isBadLine(line): return line=='0' with open(...) as f: for line in dropwhile(isBadLine, f): # process as you see fit 

优点:对于前缀行比“0”更复杂(但不相互依赖)的情况,这很容易扩展。

你可以使用List-Comprehension使其成为一个单行的:

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

更多关于PEP 202和Python文档中的列表理解。

这是一个获取文件中两个行号之间的行的方法:

 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 

输出:

 ['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'] 

只要用一个参数来调用它就可以从第n行 – > EOF中获得

如果是一张桌子。

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