gpt4 book ai didi

python-3.x - Python - 如何读取多个文件、处理和写入多个文件

转载 作者:行者123 更新时间:2023-12-01 06:02:40 25 4
gpt4 key购买 nike

我正在尝试用 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

    This is the file where the processing stuff is. After each file is processed, the corresponding output is to be written to a file in its output directory


    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 包使用单个文件对象打开多个文件并对它们进行处理,但它没有正确写入多个文件。即它是多次写入第一个文件的输出数据,而不是写入不同的输出数据。

    请帮忙!

    最佳答案

    您不需要在 pyscp.py 中再次迭代您的文件.您正在有效地创建一个嵌套循环,它看起来像这样:

    for i_main in filelist:
    # here you are reading your inputfile
    # then you do some processing
    for i_pyscp in filelist:
    # here you are writing to outputfile

    这当然会将所有输入文件的所有结果写入所有输出文件。因为你是用 'w' 打开它们的属性,它们被覆盖,只留下外循环最后一次迭代的输出,即 filelist 中的最后一个文件.

    我建议删除 pyscp.py 中的循环就做 return final_string .在 main.py然后您可以将其写入文件。

    关于 main.py 的另外三个评论:
  • 我很惊讶您在 open(inputdir + i, 'r') 中没有收到“找不到文件”错误消息因为您缺少路径分隔符。 open(os.path.join(inputdir + i), 'r')将是去这里的方式。
  • 通常你不需要f.flush() , 如 f.close()会为你照顾它。此外,您没有将任何数据写入输入文件。
  • 另外,您不需要 f.close()with声明照顾它你的。
  • 关于python-3.x - Python - 如何读取多个文件、处理和写入多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752357/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com