Почему бы не сделать это:
for line in open(FunctionPath):
line = line.strip()
if line.startswith('def '):
print '%s: %s' % (FunctionPath, line.partition(':')[0])
А если вы используете модуль fileinput , вы можете очень легко перебирать строки из нескольких входных потоков:
import fileinput
for line in fileinput.input(paths):
line = line.strip()
if line.startswith('def '):
print '%s: %s' % (fileinput.filename(), line.partition(':')[0])
Кстати, если вы не укажете fileinput.input какой-либо путь, он будет использовать sys.argv по умолчанию, поэтому вы можете запустить свой скрипт на python так:
$ python script.py filepath1 filepath2 filepath3
fileinput будет читать файлы для вас.
если вы действительно хотите охватить все случаи, вам не следует использовать replace (':', ''), потому что возможно иметь
def func(): #comment myfunc():
pass
Следующее даст вам правильный результат:
>>> 'def func(): #comment myfunc():'.partition(':')[0]
'def func()'
Если вы не хотите, чтобы комментарий также.