在读取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帮助我跳过由linetostart
variables指定的行数。 如果你想跟踪这些,你可以得到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)