根据 python 中源文件中的条件,将文件写入带有附加文本的新文件

Wrtie a file to a new file with addition text based on criteria within source file in python

我正在尝试获取一个 Python 脚本,它将打开一些文本文件,读取内容,每次它从列表中找到一个单词时,用新文本阻止它,然后将其写入每个文件一个新文件。

现在,我可以让它将所有源文件写入一个文件,这是我下面的脚本,但我不确定如何继续为每个源文件创建一个新文件。

import os

KeyWords=["Magic","harry","wand"]

rootdir = "C:\books"

fileslist = []


##blanks file and preps for new data
fileout = open(rootdir+"\output\newfile.txt","w")
print (fileout)
fileout.write("Start of file\n\nLocation of output: "+rootdir+"\output \n\nFiles that are being Processed:\n\n")
fileout.close()



def sourcelist(fileslist):

        file=open(fileslist,"r")
        fileout=open(rootdir+"\output\newfile.txt", "a")

        for line in file:
                if any(word.lower() in line.lower() for word in KeyWords):
                    print("Word Found\n\n" + '\t'+line + "\nEnd\n")
                    fileout.write("<<<SEARCH TERM FOUND>>>\n\n" + '\t'+line + "\n<<<END OF BLOCK>>>\n")
                else:
                    #print('\t'+line)   #No need to print the lines with no Key words in
                    fileout.write('\t'+line)
        #return    #not sure what return does?


for root, dirs, files in os.walk(rootdir):
    dirs.clear()

    for file in files:
        filepath = root + os.sep + file
        if filepath.endswith(".txt"): 
            fileslist.append(filepath)
    for path in fileslist:
        sourcelist(path)

    print("\n".join(fileslist))    
    with open(rootdir+"\output\newfile.txt","a") as output:
        output.write("\n".join(fileslist)+"\n\n\n")
        output.close()

从整体上回答这个问题有点困难,但这里有一个通用的方法。

我有以下文件结构:

hp_extracts: # directory
    hp_parser.py
    -- inps/
       -- harry_1.txt
       -- harry_2.txt
    -- outs/
       <nothing>

inps/harry_1.txt 的内容:

When Harry got his wand it was Magic
something something magic something
something harry something

inps/harry_2.txt 的内容:

magic something something
something
harry something something

这是hp_parser.py的内容:

import os

all_files = os.listdir('inps/')
keywords=["magic","harry","wand"]

for file in all_files:
    with open('inps/{}'.format(file)) as infile, open('outs/{}'.format(file), 'w') as outfile:
        for line in infile:
            #print(line)
            for word in line.split():
                if word.lower() in keywords:
                    line = line.replace(word, '<<<SEARCH TERM FOUND>>> {} <<<END OF BLOCK>>>'.format(word))
            outfile.write(line)