我正在写一个python脚本来排序文件中的干净代码..主要是Javascript文件所以我到目前为止所做的是删除换行符并在每个半冒号后结束行,但我想做的是检查一个字符串是否在括号之间,如果它不是那么我想在一个分号后结束该行,如果它是我想让它一个人并继续..我猜我需要使用读取行?下面是我正在讨论的输出示例
for(var c=clus.length-1;
0<=c;
c--){var e=clus[c];
正如你所看到的,它在每个半结肠后结束了这一行,但我不希望在括号之间发生这种情况..对此有何帮助?这是我的代码..
import re, getpass, time
curUser=str(getpass.getuser()) # Get Current User;
dateOfUse=str(time.strftime('%x')) # Get Current Date;
FileToRead=open(r'C:/Users/' + curUser + '/Desktop/script.js', 'r') # File to open;
FileToWrite=open(r'C:/Users/' + curUser + '/Desktop/generated2.js', 'w') # File to Write / Will replace file if exists;
data=str(FileToRead.read()) # Read our file;
data=data.replace('\n', '').replace('\r', '') # Remove all Line Breaks to bring code together;
data=re.sub(r'(;)', r';\n\n', data) # End line after every Semi-colon;
FileToWrite.write('/* Cleaned ' + dateOfUse + ' */\n\n' + data) # Write data to our new file;
答案 0 :(得分:0)
对于我之前的回答,我道歉,我并不完全理解你的问题。
因此,在我看来,最好的方法是实现堆栈。查看堆栈here的详细解释。
因此,使用堆栈时要记住的重要事项是 LIFO 概念。 LIFO 代表Last in First out。在餐厅画一堆盘子,你总是拿着堆叠顶部的盘子,而不是底部的盘子。
现在把它放在你的特定环境中,堆栈将作为一种方式来判断你是否处于不同的范围之间。您逐行和逐个字符地分析文本。每次遇到打开的"("
字符时,都会将True
布尔值推送到堆栈。同样,每次遇到结束")"
字符时,都会从堆栈中取出(pop()
)一个值。
想象如下:
for(var c=clus.length-1; 0<=c; c--)
首先,初始化堆栈时,它是空的。
当您遇到第一个开放字符"("
时,会将True
值推送到堆栈。
现在,使用以下表达式:
if paranthesesDetector.isEmpty()
将评估为false;因为你的堆栈不是空的,这意味着你处于两性之间。
当您遇到结束字符")"
时,您只需在堆栈顶部弹出(取出)一个值。
现在,使用以下表达式:
if paranthesesDetector.isEmpty()
由于您的堆栈为空,将评估为True
。 这意味着您不再处于parantheses之间。
这是我做的堆栈实现的简单示例:
import re, getpass, time
curUser=str(getpass.getuser())
dateOfUse=str(time.strftime('%x'))
class Stack: #Implementation of stack
#https://interactivepython.org/runestone/static/pythonds/BasicDS/ImplementingaStackinPython.html
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
def copy(data):
"""
Function that copies text contained within 'data'
to a destination text file
"""
with open('./generated2.js', 'w') as FileToWrite:
FileToWrite.write('/* Cleaned ' + dateOfUse + ' */\n\n')
i = 0
for each in data: #Write each line in the destination file
FileToWrite.write(each)
with open('script.js', 'r') as FileToRead:
paranthesesDetector = Stack() #Instantiate Stack object
data = []
for eachLine in FileToRead: #Loop that reads every line and appends them to a list
for eachChar in eachLine:
if eachChar == "(":
paranthesesDetector.push(True)
elif eachChar == ")":
paranthesesDetector.pop()
if paranthesesDetector.isEmpty(): #Detect if between parantheses
pass #HERE do whateber you want
copy(data) #Copy the data contained in the 'data' list to the destination file