先来造一个文件:就叫做 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 :)