我使用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
时,我需要打印(“文件结束”)。
我非常感谢您的回答。
答案 0 :(得分:1)
这是一个基本的例子(Python 3.x)。我删除了node
和self
,因为它们没有在您的示例中定义:
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])
。