首页 > 解决方案 > 提取python文件中指定函数的数据| 添加评论以突出显示已删除的内容

问题描述

我想提取在指定函数下编写的代码。我正在尝试这样做:

TestFile.py使用包含以下函数的示例文件sub()

def sub(self,num1,num2):
    # Subtract two numbers
    answer = num1 - num2
    # Print the answer
    print('Difference = ',answer)

如果我运行get_func_data.py

def giveFunctionData(data, function):
    dataRequired = []
    for i in range(0, len(data)):
        if data[i].__contains__(str(function)):
            startIndex = i
            for p in range(startIndex + 1, len(data)):
                dataRequired.append(data[p])
                if data[p].startswith('\n' + 'def'):
                    dataRequired.remove(dataRequired[len(dataRequired) - 1])
                    break
    print(dataRequired)
    return dataRequired

data = []
f = open("TestFile.py", "r")
for everyLine in f:
    if not(everyLine.startswith('#') or everyLine.startswith('\n' + '#')):
        data.append(everyLine)

giveFunctionData(data,'sub') # Extract content in sub() function

我希望得到以下结果:

answer = num1 - num2
print('Difference = ',answer)

但是在这里我也得到了函数内部的注释。而不是列表,有没有办法在文件中写入它?

标签: pythonfunction

解决方案


我已经生成了可以完成任务的代码。我认为您不需要 2 个不同的处理部分(例如函数和代码)来获取数据。

你可以做一件事,创建一个接受 2 个参数的函数,即文件名和函数名。函数应该返回你想要的代码。

我创建了函数 getFunctionCode(filename,funcname)。代码运行良好。

def getFunctionCode(filename, funcname):
    data = []
    with open(filename) as fp:
        line = fp.readlines()
        startIndex = 0 #From where to start reading body part
        endIndex = 0 #till what line because file may have mult
    for i in range(len(line)): #Finding Starting index 
        if(line[i].__contains__(funcname)):
            startIndex = i+1
            break

    for i in range(startIndex,len(line)):
        if(line[i].__contains__('def')): #Find end in case - multiple function
            endIndex = i-1
            break
        else:
            endIndex = len(line)

    for i in range(startIndex,endIndex):
        if(line[i] != None):
            temp = "{}".format(line[i].strip())[0]
            if(temp != '\n' and  temp != '#'):
                data.append(line[i][:-1])
    return(data)

我已阅读第一个参数中提供的文件。然后找出函数是位置的索引。功能在第二个论证中提供。从索引开始,我清除了 string 并检查了第一个字符以了解 comment(#)和 new line (\n)。最后,附加没有这些的行。

在这里,您可以找到文件 TestFile.py :

def sub(self,num1,num2):
    # Subtract two numbers
    answer = num1 - num2
    # Print the answer
    print('Difference = ',answer)

def add(self,num1,num2):
    # addition of two numbers
    answer = num1 + num2
    # Print the answer
    print('Summation = ',answer)

def mul(self,num1,num2):
    # Product of two numbers
    answer = num1 * num2
    # Print the answer
    print('Product = ',answer)

执行功能:

getFunctionCode('TestFile.py','sub')
['    answer = num1 - num2', "    print('Difference = ',answer)"]

getFunctionCode('TestFile.py','add')
['    answer = num1 + num2', "    print('Summation = ',answer)"]

getFunctionCode('TestFile.py','mul')
['    answer = num1 * num2', "    print('Product = ',answer)"]

在此处输入图像描述

MoltenMuffins 的解决方案也更容易。


推荐阅读