python实现查找c cpp的文件[原创]

因为想在windows下使用cscope + ctags + gvim , 之前在linux下
find ./ -name "*.c" -o -name "*.cpp"   就是把所有程序文件存到一个指定文件中然后 用cscope索引

找到
Python写的列举指定目录下所有子目录的工具 http://blog.csdn.net/Jupin/archive/2005/01/15/254871.aspx
但他是只列出有程序文件的目录就跳出来,小小改造后

---------------------------------------------findc.py-----------------------
#!/usr/bin/env python
# showdir
from os.path import *
import string
import os
def walkdir(spath, mode):
    path = os.listdir(spath)
    dir, file = [], []
    for i in path:
        if isdir(join(spath, i)):
            dir.append(i)
        else:
            file.append(i)
    if mode == ['']:
        print spath
    else:
        for j in file:
            findout = 0
            for k in mode:
                if j[-len(k):] == k:
                    print spath + "/" + j
                    #findout = 1
                    #break
            #if findout:
                #break
    for k in dir:
        walkdir(join(spath, k), mode)
      
def isfiletype(mode):
    return 1
  
def findc():
    #print 'Welcome...'
    #spath = raw_input("Input file path: ")
    spath = "./"
    if not isdir(spath):
        print "File path error!"
        return
    #mode = raw_input("input file type: ")
    mode = ".c,.cpp,.h"
    if not isfiletype(mode):
        print "File type error!"
        return
    #print 'Files list...'
    smode = string.split(mode, ',')
    walkdir(spath, smode)

if __name__ == "__main__" :
    findc()

--------------------findc.bat------------
findc.py > find_list.txt


以下是我的 ~/.bash_profile存的,做成function算了省得麻烦

#============================
function RunCtags()
{
#map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
if [ $# -eq 0 ] ; then
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
else
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q $@
fi
}
function RunCpp()
{
if [ $# -eq 0 ] ; then
ctags -n -f cppcomplete.tags --fields=+ai --C++-types=+p * -L cscope.files
else
ctags -n -f cppcomplete.tags --fields=+ai --C++-types=+p * -L cscope.files
fi
}

function RunCs()
{
# find . -name "*.h" -o -name "*.c" -o -name "*.cc" -o -iname "*.cpp" > cscope.files
# cscope -bkq -i cscope.files
# #ctags -R
# 0 或 s: 查找本 C 符号 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
# 1 或 g: 查找本定义 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
# 2 或 d: 查找本函数调用的函数
# 3 或 c: 查找调用本函数的函数
# 4 或 t: 查找本字符串
# 6 或 e: 查找本 egrep 模式 相当于egrep功能,但查找速度快多了
# 7 或 f: 查找本文件 查找并打开文件,类似vim的find功能
# 8 或 i: 查找包含本文件的文件
#
# --------------------------------------------------------------------------------------------

if [ $# -eq 0 ] ; then
find `pwd` -name "*.h" -o -name "*.c" -o -name "*.cc" -o -iname "*.cpp" > cscope.files
else
find "$@" -name "*.h" -o -name "*.c" -o -name "*.cc" -o -iname "*.cpp" > cscope.files
fi
cscope -bkq -i cscope.files
}

function RunAll()
{

if [ $# -eq 0 ] ; then
RunCs
RunCpp
RunCtags
else
RunCs $@
RunCpp $@
RunCtags $@
fi

}
#============================省得麻烦还可以在 ~/.vimrc 里加上 ,生成 /usr/include 的东西发有几百M太吓人还是放弃了
if filereadable("~/.tags/cscope.out")
cs add ~/.tags/cscope.out
" else add database pointed to by environment
endif

if filereadable("~/.tags/tags")
set tags+=~/.tags/tags
" else add database pointed to by environment
endif

你可能感兴趣的:(#Python)