python - 提取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)
但是在这里我也得到了函数内部的注释。而不是列表,有没有办法在文件中写入它?
解决方案
我已经生成了可以完成任务的代码。我认为您不需要 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 的解决方案也更容易。
推荐阅读
- or-tools - 如何使用 or-tools 在 bool 数组中制作 K 个不同的元素?
- microservices - 微服务聚合器服务 BFF
- python - 使用索引号同时更改 pandas 数据框中的多个列名(不是所有列名)
- android - 使用 Mircosoft 图形 REST API 进行自动发现
- html - href vs 链接反应?JS 不是基于 HTML 标签加载的
- php - 从一个表中获取数组数据并插入到另一个表中
- python - 如何从嵌套元组列表中生成批量数据?
- javascript - Javascript用0替换最后一个数字而不是用指数符号表示数字
- sql - 基于某些内容的总和表
- java - 通过 jni 从 Java 调用时,C++ iostreams 不起作用