next()
不起作用。在Python中读取下一行的替代方法是什么?这是一个示例:
filne = "D:/testtube/testdkanimfilternode.txt"
f = open(filne, 'r+')
while 1:
lines = f.readlines()
if not lines:
break
for line in lines:
print line
if (line[:5] == "anim "):
print 'next() '
ne = f.next()
print ' ne ',ne,'\n'
break
f.close()
在文件上运行此操作不会显示“ne”。
答案 0 :(得分:29)
当你执行:f.readlines()
时,您已经阅读了所有文件,因此f.tell()
会向您显示您位于文件末尾,并且执行f.next()
将导致StopIteration
1}}错误。
您想要做的事情的替代方案是:
filne = "D:/testtube/testdkanimfilternode.txt"
with open(filne, 'r+') as f:
for line in f:
if line.startswith("anim "):
print f.next()
# Or use next(f, '') to return <empty string> instead of raising a
# StopIteration if the last line is also a match.
break
答案 1 :(得分:17)
next()
在您的情况下不起作用,因为您首先调用readlines()
,它基本上将文件迭代器设置为指向文件末尾。
由于您正在读取所有行,您可以使用索引引用下一行:
filne = "in"
with open(filne, 'r+') as f:
lines = f.readlines()
for i in range(0, len(lines)):
line = lines[i]
print line
if line[:5] == "anim ":
ne = lines[i + 1] # you may want to check that i < len(lines)
print ' ne ',ne,'\n'
break
答案 2 :(得分:2)
lines = f.readlines()
读取文件f的所有行。因此,在文件f中没有更多的行可读取是有意义的。 如果要逐行读取文件,请使用readline()。
答案 3 :(得分:1)
您不需要阅读下一行,而是在遍历这些行。 行是一个列表(数组),行中的行正在迭代它。每次你完成一个你移动到下一行。如果您想跳到下一行,只需继续退出当前循环。
filne = "D:/testtube/testdkanimfilternode.txt"
f = open(filne, 'r+')
lines = f.readlines() # get all lines as a list (array)
# Iterate over each line, printing each line and then move to the next
for line in lines:
print line
f.close()
答案 4 :(得分:1)
对算法进行一些小改动:
filne = "D:/testtube/testdkanimfilternode.txt"
f = open(filne, 'r+')
while 1:
lines = f.readlines()
if not lines:
break
line_iter= iter(lines) # here
for line in line_iter: # and here
print line
if (line[:5] == "anim "):
print 'next() '
ne = line_iter.next() # and here
print ' ne ',ne,'\n'
break
f.close()
但是,使用itertools
recipes中的pairwise
函数:
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = itertools.tee(iterable)
next(b, None)
return itertools.izip(a, b)
您可以将循环更改为:
for line, next_line in pairwise(f): # iterate over the file directly
print line
if line.startswith("anim "):
print 'next() '
print ' ne ', next_line, '\n'
break
答案 5 :(得分:0)
不需要使用next
或readlines
等。正如documentation所说:“要读取文件中的行,您可以在文件对象上循环。这是高效,快速的内存,并导致简单的代码。”
这是一个例子:
with open('/path/to/file') as myfile:
for line in myfile:
print(line)
答案 6 :(得分:0)
file = '../input/testtxt/kaggle.txt'
output = []
con = 'Image for'
with open(file, 'r') as fp:
lines = fp.readlines() #reading line by line
for i in range(0, len(lines)):
# print(lines[i])
if(con in lines[i]): #condition matching
output.append(lines[i + 1]) #match content
print(output)