Python读下一个()

时间:2011-06-02 10:05:19

标签: python

python中的

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

7 个答案:

答案 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)

不需要使用nextreadlines等。正如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)