我正在尝试从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
不正确,但我把它留在那里说明还必须打印下一行文字。
答案 0 :(得分:4)
您应该考虑更改代码以使其正常工作。从顶部开始:
请考虑在context manager语句中将您打开的文件用作with
。引用explanation in the docs:
在处理文件对象时,最好使用
with
关键字。优点是文件在套件完成后正确关闭,即使在某个时刻引发了异常。使用with
也比编写等效的try-finally
块短得多。
你正在迭代的文件对象是一个迭代器(谁来捣乱呢?)。这意味着您可以将内置next
函数应用于它。即使您没有因为文件对象的延迟迭代而中断循环,这也会起作用。通常,除非您确实知道自己在做什么,否则在next
循环内调用迭代器上的for
可能会导致非常意外的结果。
每一行(可能除了最后一行)都包含一个尾随的\n
字符。 print
通常会为其打印的字符串添加另一个换行符。要避免使用双换行符,可以将end=''
添加到print
的参数中。 end
是一个仅限关键字的参数,用于确定print
附加到其输出的行结尾。
当用户在文件的最后一行输入单词时,您需要澄清您想要发生的事情:示例中为'Lemons'
。目前,使用next
会引发StopIteration
错误。您可以捕获错误,对其进行转换,或者只是在文件末尾添加一个空行以确保它不会发生。
以下是组合使用的所有内容:
with open('Fruit.txt',"r") as file: for line in file: if InputText in line: print(line, end='') print(next(file), end='') break
答案 1 :(得分:3)
如果您的行匹配,您可以致电next(input)
以生成以下行。
此外,如果您使用with
上下文管理器,则无需关闭文件,这将清除代码
InputText = 'Pears'
with open('Fruit.txt', "r") as input:
for line in input:
if InputText in line:
print(line, end='')
print(next(input), end='')
break
>> Pears
>> Lemons
或者使用原始解决方案:
InputText = 'Apples'
infile = open('Fruit.txt',"r")
for line in infile:
if InputText in line:
print(line, end='')
print(next(infile), end='')
return
infile.close()
>> Apples
>> Oranges