1. 程式人生 > >python指令碼處理程式碼註釋規範化

python指令碼處理程式碼註釋規範化

python指令碼 實現註釋的規範化處理:

示例:

1.

原始碼:

int speed = 4;//設定速度為4

處理後:

//設定速度為4

int speed = 4;

2.

原始碼:

else{//否則

處理後:

//否則

else{

3.

原始碼:

}else{//否則

處理後:

//否則

}else{

4.

原始碼:

if(condition == true){//如果為真

處理後:

//如果為真

if(condition == true){

5.

原始碼:

json處理:(js)

var testJson = {

name:”lmn”,//名字

age:”25”//年齡

}

處理後:

不進行處理。

說多無益,直接上程式碼:

#encoding:utf-8

'''
可能性如下:
	1.單獨一行註釋:
	2.有程式碼有註釋
	3 }else{//
	4.多行註釋
	/**
     * //獲取所有配件重量總和
     * @param index 將要裝備的第幾個配件槽
     * @param unitId 將要裝備配件ID
     */
     5.
     	1: "tankmuzzle",//炮管 11
    滿足要求:
    	所有的註釋都單獨一行,除了JSON的註釋
    	保持與下一行同樣縮排
'''
import os

#檔案列表
fileList = []
writeFileList = []
#程式碼註釋格式宣告
codeAnnotationDec = '//'

# str:將要處理的code  saveList:將要存入的列表
def dealCodeWithSpace(lines,willSaveList):

	# lines=lines.strip('\n')
	#計算程式碼首部縮排空格長度 去掉尾部空格長度 - 去掉首尾空格長度
	headSpaceLen = len(lines.rstrip())-len(lines.strip())
	#先添加註釋(註釋程式碼+首部縮排)
	# willSaveList.append(" "*headSpaceLen+lines[lines.find(codeAnnotationDec):len(lines)])
	tempAnno = lines[lines.find(codeAnnotationDec): ].rstrip()
	if tempAnno.find('\n')>-1:
		willSaveList.append(" "*headSpaceLen+tempAnno)
	else:
		willSaveList.append(" "*headSpaceLen+tempAnno+'\n')
		willSaveList.append('\n')


	if len(willSaveList)>=2:
		if willSaveList[len(willSaveList) -1] == '\n' and willSaveList[len(willSaveList) -2].find(codeAnnotationDec)>-1:
			willSaveList.pop()

	#再新增程式碼:
	tempCode = lines[0:lines.find(codeAnnotationDec)]
	if tempCode.find('\n')>-1:
		willSaveList.append(tempCode)
	else:
		willSaveList.append(tempCode)
		willSaveList.append('\n')
	# willSaveList.append(lines[0:lines.find(codeAnnotationDec)].rstrip()+'\n')
		
		

def doDealCode(readFilePath,writeFile):
	#如果傳遞進來的是檔案,就直接加入處理檔案列表
	if os.path.isfile(readFilePath):
		fileList.append(dir.decode("utf-8"))
		writeFileList.append(dir.decode("utf-8"))
	#把讀取目錄的所有檔案加入檔案列表
	elif os.path.isdir(readFilePath):
		for singleFile in os.listdir(readFilePath):
			fileList.append(os.path.join(readFilePath,singleFile))
			writeFileList.append(os.path.join(writeFile,singleFile))


	if 1:
		fileIndex = 0
		for readSingleFile in fileList:
			#處理後的程式碼行,每行都會插入列表中
			willSaveList =[]
			fileIndex = fileList.index(readSingleFile)

			#初步處理檔案行,依次加入一個列表中
			with open(readSingleFile,'r') as fileLine:
				while True:
					#整行讀取資料
					lines = fileLine.readline()

					if not lines:
						break
					#如果該行不為空
					else:
						# 該行有 單行註釋
						if lines.find(codeAnnotationDec)>-1:
							#該行為存粹一行註釋
							if lines.strip().find(codeAnnotationDec) == 0:
								willSaveList.append(lines)							
							#該行既有程式碼,也有註釋
							else:
								#處理json檔案,預設註釋和程式碼放在一行:
								if lines.find(":")>-1:
									willSaveList.append(lines)
										

									
								#處理 }else{ 情況  #存在三種情況:1: else{//dfsdfdsfsdf   2:}else{//dsfdfdsf   3.if(j == index){//計算的重量,用將要替換的配件的重量
								elif len(lines[0:lines.find(codeAnnotationDec)].rstrip())>0 and lines[0:lines.find(codeAnnotationDec)].rstrip()[-1] == '{':
									#第一種情況處理:
									if lines.strip().find("else") == 0:
										dealCodeWithSpace(lines,willSaveList)
									#第二種 和第三種 情況處理
									else:
										#第三種情況:
										if lines.strip().find('if') == 0:
											dealCodeWithSpace(lines,willSaveList)
										#第二種情況
										else:
											#計算程式碼首部縮排空格長度 去掉尾部空格長度 - 去掉首尾空格長度
											headSpaceLen = len(lines.rstrip())-len(lines.strip())
											# 1.在 else 前面插入一行:
											willSaveList.append(lines[0:lines.find("else")]+'\n')

											# 求出將要處理的字串  else{ 縮排要和上一行 { 保持一致
											willDealCode = headSpaceLen*' '+lines[lines.find("else"): ]
											# 2.按照 code;//dsfdsfsdf 的格式進行處理  
											dealCodeWithSpace(willDealCode,willSaveList)
									
								#不含特殊情況的註釋情況:例如:code;//annotation
								else:
									dealCodeWithSpace(lines,willSaveList)
						#該行沒有註釋(一行程式碼或者換行)		
						else:
							# willSaveList[len(willSaveList)-1].scrip().find('\n') == 0:
							willSaveList.append(lines)
				pass

				#寫入同名檔案到另一個目錄下
				with open(writeFileList[fileIndex],'w') as tempWrite:
					print("------ WRITE SUC------",writeFileList[fileIndex]);
					print(writeFileList[fileIndex])
					for line in willSaveList:
						tempWrite.write(line)

					# print("******* SUC *******");

#讀取檔案的路徑
readFilePath = "./readFile"
#寫入檔案的路徑
writeFile = "./writeFile"
#開始處理檔案
doDealCode(readFilePath,writeFile)