如何从文本文件python

时间:2017-09-25 16:44:00

标签: python python-3.x file loops

我正在尝试从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不正确,但我把它留在那里说明还必须打印下一行文字。

2 个答案:

答案 0 :(得分:4)

您应该考虑更改代码以使其正常工作。从顶部开始:

  1. 请考虑在context manager语句中将您打开的文件用作with。引用explanation in the docs

      

    在处理文件对象时,最好使用with关键字。优点是文件在套件完成后正确关闭,即使在某个时刻引发了异常。使用with也比编写等效的try-finally块短得多。

  2. 你正在迭代的文件对象是一个迭代器(谁来捣乱呢?)。这意味着您可以将内置next函数应用于它。即使您没有因为文件对象的延迟迭代而中断循环,这也会起作用。通常,除非您确实知道自己在做什么,否则在next循环内调用迭代器上的for可能会导致非常意外的结果。

  3. 每一行(可能除了最后一行)都包含一个尾随的\n字符。 print通常会为其打印的字符串添加另一个换行符。要避免使用双换行符,可以将end=''添加到print的参数中。 end是一个仅限关键字的参数,用于确定print附加到其输出的行结尾。

  4. 当用户在文件的最后一行输入单词时,您需要澄清您想要发生的事情:示例中为'Lemons'。目前,使用next会引发StopIteration错误。您可以捕获错误,对其进行转换,或者只是在文件末尾添加一个空行以确保它不会发生。

  5. 在模块级循环中使用return是非法的。如果您的代码不在函数或方法中,则应使用break退出循环而不是return

  6. 以下是组合使用的所有内容:

    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