0

我的输入文件如下所示:

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,为什么不坚持start、stop、step的方法?

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 行。

4

5 回答 5

4

你想要的代码是

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

您拥有的第一个循环是在文件中前进。

于 2013-11-13T17:44:24.293 回答
1

对于可迭代中的每个项目(在本例中xrange),您正在调用nextfile-obj 并忽略结果 - 要么对结果做一些事情,要么更好的是,让它更清晰:

from itertools import islice
with open('file') as fin:
    for line in islice(fin, 7):
        # do something
于 2013-11-13T17:48:27.857 回答
0

呃,好吧,因为你告诉它跳过前 7 行?解决方案:不要那样做。

于 2013-11-13T17:44:17.137 回答
0

这不是 xrange。

你首先循环遍历所有的 xrange。

然后你退出循环

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

于 2013-11-13T17:45:14.970 回答
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
于 2013-11-13T17:48:20.193 回答