
这个题可以这样实现:
[code lang="pyton"]
f= open('sss','r').readlines()
f[100:300]
文件并不能直接进行切片操作。redlines()可以把每一行读入到一个列表中。
弊端,readlines()方法会一次性的把文件导入到内存当中,如果文件很大,那就尴尬了(内存不足)。
我们可以使用标准库下的itertools下的islice 方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
In [74]: from itertools import islice In [75]: islice? Init signature: islice(self, /, *args, **kwargs) Docstring: islice(iterable, stop) --> islice object islice(iterable, start, stop[, step]) --> islice object Return an iterator whose next() method returns selected values from an iterable. If start is specified, will skip all preceding elements; otherwise, start defaults to zero. Step defaults to one. If specified as another value, step determines how many values are skipped between successive calls. Works like a slice() on a list but returns an iterator. Type: type In [76]: islice(f,0,10) Out[76]: <itertools.islice at 0x1055fe638> # 读取前十行 In [77]: islice(f,0,None) Out[77]: <itertools.islice at 0x1056014f8> # 从开头带结尾 In [78]: islice(f,10) Out[78]: <itertools.islice at 0x1055ae868> # 读取前十行 In [85]: l Out[85]: range(0, 10) In [86]: t = iter(l) In [87]: for x in islice(t,5,7): ...: print(x) ...: 5 6 #注意如果在用到迭代器,他会直接往下走,所以要用的时候注意下,你可以重新iter一个,这样就不会有问题了 In [88]: for x in t: ...: print(x) ...: ...: 7 8 9 |
