格式化代码
2017-04-04 20:50 雄风狂飙 阅读(93) 评论(0) 收藏 举报机器学习兴起,python火热了起来。最近在学习。
正好有一个需要格式化c++代码的活要干,就用python试一下。
目前版本是一个很简单的,只是进行了 缩进4个空格的处理。详见代码.
class Stack: def __init__(self,stack): self.stack = stack self.size=0 def pop(self): elem={} if self.size > 0: elem = self.stack[-1] self.stack.remove(self.stack[-1]) self.size -= 1 return elem def push(self,elem): #print(self.size) #print(elem) self.stack.append(elem) self.size += 1 #print(self.stack) def reverseSt(self): self.stack.reverse() #print(self.stack) def getSize(self): return self.size def beautyCode(): infileName = input("pls input the file name with path:") fileLine = int( input("pls input the file lines:") ) outfileName = input("pls input the new file name with path:") #infileName = 'g:/t.txt' #fileLine = 25 #outfileName = 'g:/ts.txt' infile = open(infileName,'r') lines = [ line.lstrip() for line in infile] infile.close() i = 0; while i < len(lines): #print(lines[i]) i += 1 stack = [] st = Stack(stack) i=0 dit={} while i < len(lines): if '{' in lines[i]: dit = {"{":i+1} elif '}' in lines[i]: dit = {"}":i+1} else: i+=1 continue i+=1 st.push(dit) st.reverseSt() lineStart = 0 lineEnd = 0 spacecount = 0 outfile = open(outfileName,'w') tp = st.pop() lineEnd = list(tp.values())[0] while lineStart < lineEnd: strValue = " "*spacecount + lines[lineStart] outfile.write(strValue) lineStart += 1 spacecount += 4 while st.getSize() > 0: tp = st.pop() lineEnd = list( tp.values() )[0] while lineStart < lineEnd: strValue = "" if '}' in lines[lineStart]: strValue = " "*(spacecount-4) + lines[lineStart] else: strValue = " "*spacecount + lines[lineStart] if lines[lineStart].count('\n') == len(lines[lineStart]): lineStart += 1 continue outfile.write(strValue) lineStart += 1 if list(tp.keys())[0] == '{': spacecount += 4 elif list(tp.keys())[0] == '}': spacecount -= 4 outfile.flush() outfile.close() def main(): beautyCode() main()