Python 索引器读取源代码文件夹中的注释

Python 索引器读取源代码文件夹中的注释,python,file-io,documentation,indexoutofboundsexception,Python,File Io,Documentation,Indexoutofboundsexception,我正在编写一个程序,以浏览通过列表“队列”传入的文件列表 我试图逐行浏览文件,只选择单行注释或多行注释中的文本。(“//”和“/**/”->可能在多行上) 我不明白为什么我的程序不去下一行,而它应该去。如果不满足注释结尾指定“终止”,则变量“stepper”将递增 我已经进行了几天的错误测试和修改,但我不确定为什么这不起作用 对不起,代码太草率了 def main(queue): for item in queue: with open("output.txt", "a"

我正在编写一个程序,以浏览通过列表“队列”传入的文件列表

我试图逐行浏览文件,只选择单行注释或多行注释中的文本。(“//”和“/**/”->可能在多行上)

我不明白为什么我的程序不去下一行,而它应该去。如果不满足注释结尾指定“终止”,则变量“stepper”将递增

我已经进行了几天的错误测试和修改,但我不确定为什么这不起作用

对不起,代码太草率了

def main(queue):
    for item in queue:
        with open("output.txt", "a") as out_file:
            out_file.write(str("\t<FILE: " + item.split("\\")[len(item.split()) - 1] + ">"))
            java_file = list(open(item, "r"))
            for line in range(0, len(java_file)):
                for i in range(0, len(java_file[line])):
                    multi_builder = []
                    single_lines = []
                    if (java_file[line][i] == "/" and java_file[line][i + 1] == "/"):
                        single_lines.append(java_file[line][i:])
                    if (java_file[line][i] == "/" and java_file[line][i + 1] == "*"):
                        stepper = 0
                        terminated = False
                        while not terminated:
                            for char in range(0, len(java_file[line + stepper])):
                                if not java_file[line][char].strip() == "":
                                    print (java_file[line][char])
                                    if (java_file[line][char] == "*" and java_file[line][char + 1] == "/"):
                                        if stepper == 0:
                                            multi_builder.append(java_file[line][i:char + 1])
                                        multi_builder.append(java_file[line][:char + 1])
                                        terminated = True
                                    else:
                                        multi_builder.append(java_file[line])
                                        stepper += 1
def main(队列):
对于队列中的项目:
打开(“output.txt”、“a”)作为输出文件:
out\u file.write(str(“\t”))
java_文件=列表(打开(项目“r”))
对于范围(0,len(java_文件))中的行:
对于范围(0,len(java_文件[line])中的i:
multi_builder=[]
单_行=[]
如果(java_文件[line][i]==“/”和java_文件[line][i+1]==“/”):
追加(java_文件[line][i:])
如果(java_文件[line][i]==“/”和java_文件[line][i+1]==“*”):
步进电机=0
终止=错误
虽然没有终止:
对于范围(0,len(java_文件[line+stepper])中的字符:
如果不是java_文件[line][char].strip()==“”:
打印(java_文件[line][char])
如果(java_文件[line][char]=“*”和java_文件[line][char+1]=”/”:
如果步进器==0:
multi_builder.append(java_文件[line][i:char+1])
multi_builder.append(java_文件[line][:char+1])
终止=真
其他:
multi_builder.append(java_文件[line])
步进电机+=1

我不确定您是否对另一种方法感兴趣,而不是帮助调试您的方法,但使用会使此任务更容易:

import re

singleLinePattern = re.compile("//.*$", flags=re.MULTILINE+re.DOTALL)
multiLinePattern = re.compile("/\*.*?\*/", flags=re.MULTILINE+re.DOTALL)

def main(queue):
    for item in queue:
        with open("output.txt", "a") as out_file:
            out_file.write(str("\t<FILE: " + item.split("\\")[len(item.split()) - 1] + ">"))
            with open(item, "r") as f:
                java_file = f.read()
            print "singles:", singleLinePattern.findall(java_file)
            print "multis:", multiLinePattern.findall(java_file)
            # You can write the results to the output file here.
重新导入
singleLinePattern=re.compile(“/.*$”,flags=re.MULTILINE+re.DOTALL)
multiLinePattern=re.compile(“/\*.*?\*/”,flags=re.MULTILINE+re.DOTALL)
def主(队列):
对于队列中的项目:
打开(“output.txt”、“a”)作为输出文件:
out\u file.write(str(“\t”))
未结项(项目“r”)为f:
java_file=f.read()
打印“singles:”,singleLinePattern.findall(java_文件)
打印“multis:”,multiliepattern.findall(java_文件)
#您可以在此处将结果写入输出文件。

将堆栈跟踪包含在问题中会有帮助。您不清楚问题出在哪里。此外,我们可能会帮助您找到解决问题的方法,但看起来您正在重新发明轮子。是为这类事情设计的。