Я сгенерировал код, который выполняет вашу задачу. Я не думаю, что вам требуются две разные части обработки, такие как функция и код для извлечения данных.
Вы можете сделать одну вещь, создать функцию, которая принимает 2 аргумента, т.е. Имя файла и Имя функции. Функция должна возвращать нужный код.
Я создал функцию getFunctionCode (имя файла, имя_функции). Код работает хорошо.
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)
Я прочитал файл, указанный в первом аргументе. Затем выяснил индекс, где функция - это местоположение. Функция предусмотрена во втором аргументе. Начиная с индекса, я очистил строку и проверил первый символ, чтобы узнать о комментарии (#)
и новой строке (\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)"]
![enter image description here](https://i.stack.imgur.com/TAhKx.png)
Решение от MoltenMuffins также проще.