如何从文本文件python打印下一行

2024-04-16

我正在尝试从 python 中的文本文件中打印两行文本,它们在单独的行上彼此相邻。所以文本文件看起来像这样:

Apples
Oranges
Pears
Lemons

如果有人输入苹果,我希望程序打印出来:

Apples
Oranges

这是我到目前为止的代码:

file = open('Fruit.txt',"r")
for line in file:
    if InputText in line:
        print(line)
        print(line+1)
        return
file.close() 

当然变量line+1不正确,但我将其留在那里是为了说明下一行文本也必须打印。


您应该考虑更改代码中的一些内容以使其正常工作。从顶部开始:

  1. 考虑将您打开的文件用作上下文管理器 https://docs.python.org/3/reference/datamodel.html#context-managers in a with https://docs.python.org/3/reference/compound_stmts.html#with陈述。引用文档中的解释 https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files:

    使用with处理文件对象时的关键字。优点是文件在其套件完成后会正确关闭,即使在某个时刻引发异常也是如此。使用with也比同等的写作要短得多try-finally blocks.

  2. 您正在迭代的文件对象是一个迭代器(谁知道它是什么?)。这意味着您可以应用内置的next https://docs.python.org/3/library/functions.html#next对它起作用。即使由于文件对象的惰性迭代而没有跳出循环,这也将起作用。一般来说,除非你真的知道自己在做什么,否则调用next在 a 内的迭代器上for循环可能会导致非常意外的结果。

  3. 每行(可能除了最后一行)都将包含一个尾随\n特点。print https://docs.python.org/3/library/functions.html#print通常会在它打印的字符串中附加另一个换行符。为了避免双换行,您可以添加end=''的论点print. end是一个仅关键字参数,用于确定行结尾print附加到其输出。

  4. 您需要明确当用户在文件最后一行输入单词时您希望发生什么:'Lemons'在你的例子中。目前,使用next将提出一个StopIteration https://docs.python.org/3/library/exceptions.html#StopIteration错误。您可以捕获错误,对其进行转换,或者只是在文件末尾添加一个空行以确保它不会发生。

  5. 指某东西的用途return https://docs.python.org/3/tutorial/controlflow.html?highlight=return%20statement#defining-functions在模块级循环中是非法的。如果您的代码不在函数或方法中,您应该使用break https://docs.python.org/3/tutorial/controlflow.html?highlight=return%20statement#break-and-continue-statements-and-else-clauses-on-loops跳出循环而不是return https://docs.python.org/3/reference/simple_stmts.html#return.

以下是所有内容的组合:



with open('Fruit.txt',"r") as file:
    for line in file:
        if InputText in line:
            print(line, end='')
            print(next(file), end='')
            break
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从文本文件python打印下一行 的相关文章

随机推荐