我正在尝试从 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
不正确,但我将其留在那里是为了说明下一行文本也必须打印。
您应该考虑更改代码中的一些内容以使其正常工作。从顶部开始:
-
考虑将您打开的文件用作上下文管理器 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.
您正在迭代的文件对象是一个迭代器(谁知道它是什么?)。这意味着您可以应用内置的next https://docs.python.org/3/library/functions.html#next对它起作用。即使由于文件对象的惰性迭代而没有跳出循环,这也将起作用。一般来说,除非你真的知道自己在做什么,否则调用next
在 a 内的迭代器上for
循环可能会导致非常意外的结果。
每行(可能除了最后一行)都将包含一个尾随\n
特点。print https://docs.python.org/3/library/functions.html#print通常会在它打印的字符串中附加另一个换行符。为了避免双换行,您可以添加end=''
的论点print
. end
是一个仅关键字参数,用于确定行结尾print
附加到其输出。
您需要明确当用户在文件最后一行输入单词时您希望发生什么:'Lemons'
在你的例子中。目前,使用next
将提出一个StopIteration https://docs.python.org/3/library/exceptions.html#StopIteration错误。您可以捕获错误,对其进行转换,或者只是在文件末尾添加一个空行以确保它不会发生。
指某东西的用途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(使用前将#替换为@)