python 读取文件 next()

2 投票
4 回答
8251 浏览
提问于 2025-04-18 15:18

抱歉,我的编程水平很差,我真的是个糟糕的程序员。我参考了这个链接:如何在Python中访问文本文件的下一行。在这个问题中,next()这个模块可以读取下一行内容。

但是,一旦代码回到for循环,它读取的就不是“下一行”,而是再下一行。

输入:

a /n
b /n
c /n
d /n

输出:

This line contains a, next line contains b.
This line contains c next line contains d.

有没有可能得到这样的结果呢

This line contains a, next line contains b
This line contains b next line contains c

编辑-抱歉,我忘了输入代码示例:

a = open('file.txt','rb')
for i in a:
 b = next(a)
 print "this line contains %s, next line contains %s" %(a,b)
 a.close()

4 个回答

1

我觉得这样可以。不过你应该考虑改变输出的顺序。一般来说,你应该先输出当前行,然后再输出上一行,因为文件是按照这个顺序读取的。所以这样做可能会让人有点困惑。如果你觉得不错,可以给个赞哦 :-)

a = open('text.txt','rb')

current_line = " "
previous_line = " "

while (previous_line != ""):

    # In the first step, we continue and do nothing to read the next line so
    # we have both lines.
    if current_line == " " and previous_line == " ":

        # Get the first line.
        current_line = a.readline()
        continue

    # Update the lines.
    previous_line = current_line
    current_line = a.readline()

    # No output if the next line does not exist.
    if current_line == "":

        break

    # Output.
    print "This line contains " + previous_line[0] + ", next line contains " + current_line[0]

a.close()
1

你可以通过把所有的行读入一个字符串列表来解决你的问题。

a = open('file.txt','rb')
text_as_list = a.readlines()
for idx in range(len(text_as_list)-1):
    print "this line contains %s, next line contains %s" %(text_as_list[idx], text_as_list[idx+1])
a.close()
2

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能会在使用某个特定的功能时,发现它并没有按照预期工作。这种情况可能会让人感到困惑,因为我们可能不知道问题出在哪里。

通常,解决这类问题的第一步是仔细检查代码,看看是否有拼写错误或者逻辑上的问题。有时候,错误可能是因为我们没有正确理解某个功能的用法,或者没有按照要求提供必要的参数。

此外,查阅相关的文档或者社区的讨论也是一个好主意。很多时候,其他人可能遇到过类似的问题,他们的解决方案可能对我们有帮助。

总之,遇到问题时,不要着急,慢慢分析,寻找解决办法,通常都能找到出路。

a = open('file.txt','rb')
prev=a.next()
for i in a:
    print "this line contains %s, next line contains %s" %(prev,i)
    prev=i

a.close()
4

你可以使用文件对象的 readlines 方法来把文件的每一行变成一个列表。

因为每一行的末尾都有一个换行符,所以如果你想把它打印在一行上,并且后面还跟着其他文字,就需要把这个换行符去掉。你可以使用字符串对象的 strip 方法,它可以去掉字符串末尾的字符。

在遍历这些行的时候,你可以通过把索引加 1 来访问列表中的下一行。

我觉得使用 with open(...) as file_name: 这种写法来创建文件对象更好,因为它会自动帮你关闭文件。

with open('file.txt', 'rb') as text_file:
    lines = [line.strip() for line in text_file.readlines()]
    for index, line in enumerate(lines):
        # Check for last line
        try:
            next_line = lines[index + 1]
        except IndexError:
            print("this line contains %s, and is the end of file." % line)
        else:
            print("this line contains %s, next line contains %s" % (line, next_line))

撰写回答