본문 바로가기
programming language/Python

Python C/C++ 주석 지우기

by __observer__ 2014. 12. 25.
반응형

C/C++ 코드를 버전에 따라 다른 형식으로 작성해야 할 경우가 종종 있습니다.

 

예를 들어 어떤 경우에는 주석을 다 지우고 전달해야 하는 경우가 있는데~

 

이런 경우를 위해 파이썬으로 C/C++ 주석 지우는 코드를 만들어 봤습니다.

 

아래 코드에서 workingDir = "D:\TestFolder" 부분을 코드가 들어있는 최상위 폴더로 맞춰 주면 *.c, *.h 파일의 모든 주석을 지워줍니다.

 

C++ 코드 라면 AllFileList 부분에서 *.CPP 와 같은 확장자를 추가해 주면 됩니다.

 


import fnmatch
import os
import re
import shutil
import time
def AllFileList(workingDir, *exts):
out = []
for root, dirnames, filenames in os.walk(workingDir):
for ext in exts:
for filenameFullpath in fnmatch.filter(filenames, ext):
fullPath = os.path.join(root, filenameFullpath)
folderName = root.split(os.sep).pop()
out.append(fullPath)
return out
def deleteComment(strV):
strV = re.sub(r'\s*//.*?$', '', strV, flags=re.M)
strV = re.sub(r'/\*.*?\*/', '', strV, flags=re.S)
strV = re.sub(r'(^\s+$){1,}', '', strV, flags=re.M)
strV = re.sub(r'\n{3,}', '\n', strV)
return strV
def dirFileSplit(Fullpath):
workingDirFullpath = os.path.dirname(Fullpath)
filename = os.path.basename(Fullpath)
Spec = workingDirFullpath.split(os.sep).pop()
return workingDirFullpath, filename, Spec
if __name__ == '__main__':
workingDir = "D:\TestFolder"
workingDir_mod = workingDir + "_mod_" + time.strftime("%Y%m%d")
# d = datetime.datetime('%Y%m%d')
shutil.rmtree(workingDir_mod, ignore_errors=True)
os.mkdir(workingDir_mod)
outList = AllFileList(workingDir, '*.c', '*.h')
for filenameFullpath in outList:
modfilename = filenameFullpath.replace(workingDir, workingDir_mod)
fop = open(filenameFullpath, "r")
data = fop.read()
fop.close()
datamod = deleteComment(data)
workingDirFullpath, filename, Spec = dirFileSplit(modfilename)
if not os.path.isdir(workingDirFullpath):
os.mkdir(workingDirFullpath)
fw = open(modfilename, "w+")
fw.write(datamod)
fw.close()
print "------------- All End -------------"


반응형