【发布时间】:2017-05-03 06:12:29
【问题描述】:
我正在尝试在 Python 中构建源代码抄袭检测工具。我正在尝试从输入目录中存在的多个 python 程序文件中获取输入,执行一些处理并将输出写入多个文件。
这是我想要在我的代码中执行的操作:
我有 2 个文件:
- main.py,我在其中打开多个文件并调用我的类和方法
- pyscp.py 来自 SoftPlag 包,其中编写了用于处理输入文件的代码。
main.py
from SoftPlag import *
import os
inputdir = "/path/to/input/directory"
outputdir = "/path/to/output/directory"
filelist = os.listdir(inputdir)
if __name__ == '__main__':
for i in filelist:
with open(inputdir + i, 'r') as f:
fin = f.read()
if i.endswith(".py"):
scp=Pyscp()
scp.pscpp(fin)
f.flush()
f.close()
pyscp.py
这是处理内容所在的文件。每个文件完成后 处理后,将相应的输出写入其文件 输出目录
import re
import keyword
import os
inputdir = "/path/to/input/directory"
outputdir = "/path/to/output/directory"
filelist = os.listdir(inputdir)
frequency={}
class Pyscp():
#Python source-code processing class
def pscpp(self,fin):
#remove special characters from string and convert to lower-case
char_string=re.sub('[^a-zA-Z._]', ' ', fin).lower()
#remove single occurrences of characters
final_string=re.sub(r'(?:^| )\w(?:$| )', '', char_string).strip()
reservedWords={} #empty list to store the reserved keywords
reservedWords=keyword.kwlist #reserved keywords assigned to reservedWords list
for word in reservedWords:
#checking if reserved keyword exists in string or not
if word in final_string:
#substitute reserved keywords with no spaces
final_string=re.sub(r'\b' + word +r'\b', '', final_string)
else:
continue
for i in filelist:
file_output = open(os.path.join(outputdir + i +".out"), 'w')
file_output.write(final_string)
file_output.close()
我面临的问题是我能够使用 os 包使用单个文件对象打开多个文件并对它们进行处理,但它不能正确写入多个文件。即它是多次写入第一个文件的输出数据,而不是写入不同的输出数据。
请帮忙!
【问题讨论】:
标签: python-3.x