xrange不坚持开始,停止,步骤

时间:2013-11-13 17:41:26

标签: python list xrange

我的输入文件如下:

6
*,b,*
a,*,*
*,*,c
foo,bar,baz
w,x,*,*
*,x,y,z
5
/w/x/y/z/
a/b/c
foo/
foo/bar/
foo/bar/baz/

当我使用xrange时,为什么它不遵循启动,停止,步骤方法?

with open(sys.argv[1], 'r') as f:
  for _ in xrange(0, 7, 1):
    next(f)
  for listPatterns in f:
    print listPatterns.rstrip()

它输出从第7行开始的文本,实际上我希望它打印第1行到第7行。

5 个答案:

答案 0 :(得分:4)

您想要的代码是

with open(sys.argv[1], 'r') as f:
  for _ in xrange(0, 7, 1):
    print f.next().rstrip()

你拥有的第一个循环是推进文件。

答案 1 :(得分:1)

对于iterable中的每个项目(在本例中为xrange),您在文件obj上调用next并忽略结果 - 要么对该结果执行某些操作,要么更好,make make它更加清晰:

from itertools import islice
with open('file') as fin:
    for line in islice(fin, 7):
        # do something

答案 2 :(得分:0)

答案 3 :(得分:0)

它不是xrange。

你首先遍历整个xrange。

然后退出循环

然后你有另一个循环,作用于最后一个元素

答案 4 :(得分:0)

您也可以在不使用代理迭代器

的情况下遍历文件
START_LINE = 0
STOP_LINE = 6
with open(sys.argv[1], 'r') as f:
   for i, line in enumerate(f.readlines()):
       if START_LINE <= i <= STOP_LINE:
           print line.rstrip()
       elif i > STOP_LINE: 
           break