Python - 从文本文件中获取x到y行
获取一个文本文件的前10行可以这样做:
with open("myfile.txt") as myfile:
lines = [next(myfile).strip() for x in xrange(10)]
这样就会打印出前10行
但是如果我只想要第5到第10行呢?我该怎么做呢?这个文件不小,会很大。我需要一种高效的方法来实现这个。
谢谢。
5 个回答
0
这个代码的作用是读取一个文件,然后把从第 x 行到第 y 行的内容放到一个叫做 content 的变量里,变成一个列表。
with open('content.txt') as f:
content=f.read().split('\n')[x-1:y]
要注意处理换行符 '\n' 和 '\r\n'。
0
你可以试试对你已经拥有的列表进行切片。
with open("myfile.txt") as myfile:
lines = [next(myfile).strip() for x in xrange(10)][5:10]
0
我会这样做:
>>> with open("myfile.txt") as myfile:
>>> lines = myfile.read().split('\n')[5:10]
这里的“split”会把内容按行分开,变成一个行的数组,而[5:10]则是从这个数组中取出第5到第10行。变量“lines”会是一个数组,不过如果你想要直接得到第5到第10行的字符串,你可以这样做:
>>> with open("myfile.txt") as myfile:
>>> lines = '\n'.join(myfile.read().split('\n')[5:10])
这里唯一不同的是“\n.join()”这一部分,它会把数组中的每一行元素连接起来,形成一个字符串,并且每行之间用换行符分开。
0
如果你知道想从哪里开始,只需要在for循环中改变范围就可以了。
var1 = 5
var2 = 10
for x in range(var1, var2):
这样就会从5循环到10,当然你可以进一步调整你的变量。
1
最简单的方法就是用 itertools.islice
这个工具:
with open('myfile.text') as f:
lines = islice(f, 5, 11)
这个方法的好处是,它不会一次性把整个文件都加载进来,而是只会根据需要处理必要的部分。
需要注意的是,itertools
里的函数是“懒惰”的,也就是说,你必须在关闭文件之前完成对这些行的操作,或者把 islice
包装在 list()
里,这样才能强制它去处理数据。