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

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

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

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

怎么办呢?

先来打开文件:

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

得到下面的结果:

<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()返回的是一个列表.每一项是一行

这就好办了,因为列表是可以切片的嘛

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'))

这样一切片,就能得到需要的结果了:

<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

那么如果我想要隔一行读一行呢?

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

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 :)

转载于:https://my.oschina.net/avatus/blog/2248710

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值