Python-3.4打开一个python文件并查找函数名称

时间:2014-10-23 22:20:32

标签: python file

当Python文件打开以便通过

进行阅读时
read_file = open(input_file, "r"))

如何从open python文件中找到函数名称并打印出来?

2 个答案:

答案 0 :(得分:0)

使用dir()

  

不带参数,返回当前本地范围内的名称列表。使用参数,尝试返回该对象的有效属性列表。

>>> read_file = open('test.txt', 'r')
>>> dir(read_file)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']

答案 1 :(得分:0)

ast救援!

import ast

with open('somefile.py', 'r') as fin:
    source = fin.read()

tree = ast.parse(source)

class FuncFinder(ast.NodeVisitor):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.function_names = []


    def visit_FunctionDef(self, node):
        self.function_names.append(node.name)
        self.generic_visit(node)

finder = FuncFinder()
finder.visit(tree)
print(finder.function_names)

复制/粘贴工作演示:

source = """
def foo():
  pass

def bar():
  pass

class FooBar(object):
  def __init__(self):
    pass
"""

import ast

tree = ast.parse(source)

class FuncFinder(ast.NodeVisitor):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.function_names = []


    def visit_FunctionDef(self, node):
        self.function_names.append(node.name)
        self.generic_visit(node)

finder = FuncFinder()
finder.visit(tree)
print(finder.function_names)  # ['foo', 'bar', '__init__']

请注意,我们得到所有函数名称(包括类中的函数名称,嵌套在其他函数内部等)。您可以通过添加def visit_ClassDef(self, node): pass ...

轻松跳过这些内容