python:关于读取文件的指定行的问题

先来造一个文件:就叫作 test.txt吧,内容是下面这个样子:python

表头
1,数据1
2,数据2
3,数据3
4,数据4
5,数据5
6,数据6
7,数据7

那么咱们并不打算把这个表头给读出来spa

怎么办呢?code

先来打开文件:索引

fileName = 'test.txt'
with open(fileName,'r',encoding='UTF-8') as f:
    lines = f.readlines()
    print(str(type(lines))+'\n'+str(lines))

获得下面的结果:ip

<class 'list'>
['表头\n', '1,数据1\n', '2,数据2\n', '3,数据3\n', '4,数据4\n', '5,数据5\n', '6,数据6\n', '7,数据7\n']
Process finished with exit code 0

那么 f.readlines()返回的是一个列表.每一项是一行it

这就好办了,由于列表是能够切片的嘛class

fileName = 'test.txt'
with open(fileName,'r',encoding='UTF-8') as f:
    lines = f.readlines()
    print(str(type(lines))+'\n'+str(lines))
    for i in lines[1:6]:
        print(i.strip('\n'))

这样一切片,就能获得须要的结果了:test

<class 'list'>
['表头\n', '1,数据1\n', '2,数据2\n', '3,数据3\n', '4,数据4\n', '5,数据5\n', '6,数据6\n', '7,数据7\n']
1,数据1
2,数据2
3,数据3
4,数据4
5,数据5

Process finished with exit code 0

那么若是我想要隔一行读一行呢?coding

很简单,使用列表切片的步长就好了:file

fileName = 'test.txt'
with open(fileName,'r',encoding='UTF-8') as f:
    lines = f.readlines()
    print(str(type(lines))+'\n'+str(lines))
    for i in lines[1:6:2]:
        print(i.strip('\n'))
<class 'list'>
['表头\n', '1,数据1\n', '2,数据2\n', '3,数据3\n', '4,数据4\n', '5,数据5\n', '6,数据6\n', '7,数据7\n']
1,数据1
3,数据3
5,数据5

Process finished with exit code 0

那么我再搞一下,每次输出的结果的行号是个斐波那契数列...也就是输出 1,1,2,3,5,8行这样,要怎么办呢?

def gap(maxtcl):
    n,a,b=0,0,1
    while n<maxtcl:
        yield b
        a,b=b,a+b
        n=n+1

fileName = 'test.txt'
with open(fileName,'r',encoding='UTF-8') as f:
    lines = f.readlines()
    print(str(type(lines))+'\n'+str(lines))

for i in gap(5):
    print(lines[i])

结果:

<class 'list'>
['表头\n', '1,数据1\n', '2,数据2\n', '3,数据3\n', '4,数据4\n', '5,数据5\n', '6,数据6\n', '7,数据7\n']
1,数据1

1,数据1

2,数据2

3,数据3

5,数据5


Process finished with exit code 0

咱们思路如今转换到按照列表的索引进行单个元素的输出以后,再考虑一个问题,如何让输出的间隔变成1,2,3这样,也就是输出1,2,4,7行这样

fileName = 'test.txt'
with open(fileName,'r',encoding='UTF-8') as f:
    lines = f.readlines()
    print(str(type(lines))+'\n'+str(lines))
linenum=1
for i in range(1,5):
    print(lines[linenum])
    linenum=linenum+i
<class 'list'>
['表头\n', '1,数据1\n', '2,数据2\n', '3,数据3\n', '4,数据4\n', '5,数据5\n', '6,数据6\n', '7,数据7\n']
1,数据1

2,数据2

4,数据4

7,数据7


Process finished with exit code 0

emmmm........暂时就想到这么多了,have fun :)

相关文章
相关标签/搜索