在从输入file.txt逐行读取时,如何实现与每行对应的代码

时间:2017-11-15 01:39:23

标签: python python-3.x python-3.5

我使用Python3.5

我已经创建了3个函数:

 def Insert(self, key):
 def Report(self, node, a, b)
 def Print(self, node)

但我需要从输入file.txt中读取很多行:

I 20
...
...
R 17 27
...
...
P
...
...
E

要阅读上面的file.txt,我使用以下代码

filepath = 'file.txt'
with open(filepath) as fp:
   line = fp.readline()
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line))
       ine = fp.readline()
       cnt += 1

问题:在读取每一行时,我需要运行相应的函数并转动结果,然后再运行下一行。但我不知道如何在Python中实现它。

例如,当我读取行I 20时,我必须运行函数Insert(20),它会转向我。然后我继续阅读下一行R 17 27,以运行函数Report(node,17,27)。然后,我将阅读P,以运行函数Print(node)。最后,当我阅读E时,我需要打印(“文件结束”)。

我非常感谢您的回答。

2 个答案:

答案 0 :(得分:1)

这是一个基本的例子(Python 3.x)。我删除了nodeself,因为它们没有在您的示例中定义:

import sys

def Insert(key):
    print('Insert',key)

def Report(a, b):
    print('Report',a,b)

def Print():
    print('Print')

def Exit():
    sys.exit(0)

# Dictionary lookup of what function to call for each letter
dispatch = {'I':Insert,
            'R':Report,
            'P':Print,
            'E':Exit}

with open('file.txt') as fp:

    # Iterate and return the line number and line data for each line
    for cnt,line in enumerate(fp,1):

        # `line` already contains a newline so end is used to suppress a newline.
        print('Line {}: {}'.format(cnt,line),end='')

        # strip leading/trailing whitespace and split on whitespace.
        # First item to `cmd`, the rest to `data`
        cmd,*data = line.strip().split()

        # Lookup function based on command, then call it with data expanded as arguments.
        dispatch[cmd](*data)

输入文件:

I 20
R 17 27
P
E

输出:

Line 1: I 20
Insert 20
Line 2: R 17 27
Report 17 27
Line 3: P
Print
Line 4: E

如果您希望数据文件中出现错误,请编写函数以获取变量参数。例如:

def Report(*args):
    if len(args) == 2:
        a,b = args
        print('Report',a,b)
    else:
        print('Report: invalid arguments')

答案 1 :(得分:0)

如何分割线条并根据每条线上的第一个单词进行功能选择。类似的东西:

tokens = line.split()
if tokens[0] == 'I':
    # call insert
elif tokens[0] == 'R':
    # call report

等等。 args将位于其他标记中,例如,插入调用可能看起来像Insert(tokens[1])