我的输入文件如下:
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行。
答案 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