将输入字符串拆分为搜索文本文件的函数

Splitting input string into a function to search text file

到目前为止,我在这个网站上得到了很多帮助,我对 Python 编程和 Whosebug 还很陌生。

所以目前我有一个程序会提示用户输入 keyword/string 来搜索文本文档并打印出该关键字之间的结果数据。然而,我的目标是:

我的问题目前是将这些多个输入传递到搜索函数的第一部分。

当前代码:

这是我当前代码的示例:

def process(infile, outfile, keywords):

    keys = [ [k[0], k[1], 0] for k in keywords ]
    endk = None
    with open(infile, "rb") as fdin:
        with open(outfile, "wb") as fdout:
            for line in fdin:
                if endk is not None:
                    fdout.write(line)
                    if line.find(endk) >= 0:
                        fdout.write("\n")
                        endk = None
                else:
                    for k in keys:
                        index = line.find(k[0])
                        if index >= 0:
                            fdout.write(line[index + len(k[0]):].lstrip())
                            endk = k[1]
                            k[2] += 1
    if endk is not None:
        raise Exception(endk + " not found before end of file")
    return keys



from Tkinter import *
import tkSimpleDialog
import tkMessageBox
from tkFileDialog import askopenfilename
import re

root = Tk()
w = Label(root, text ="Configuration Inspector")
w.pack()
tkMessageBox.showinfo("Welcome", "This is version 1.00 of Configuration Inspector ")
infile = askopenfilename() #
outfile = askopenfilename() #

start_token = tkSimpleDialog.askstring("Serial Number", "What is the device serial number?")
end_token = tkSimpleDialog.askstring("End Keyword", "What is the end keyword")
DATA_IN = start_token

Spilt_Start = start_token.split(' ')


process(infile,outfile,((Spilt_Start + ",SHOWALL",end_token),))

因此这段代码允许您选择一个文件进行读取,然后选择一个文件进行写入。提示后,它会要求您输入一系列输入 STARTKeywords 进行搜索,直到它命中 ENDKeyword。

计划目标:

举个例子,假设我有这个文本文档:

unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data 
unimportant data unimportant data  **Start Keyword 1** something
data1
data2
data3
data4
data5
** ENDkeyword1 **
unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data 
unimportant data unimportant data  **Start Keyword 2** something
data1
data2
data3
data4
data5
Data6
** ENDkeyword2 **
unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data unimportant data 
unimportant data unimportant data  **Start Keyword 3** something
data1
data2
data3
data4
data5
data6
data7
data8
** ENDkeyword3 **

那么我们的输出目标是这样的:

something
data1
data2
data3
data4
data5
ENDkeyword1

something
data1
data2
data3
data4
data5
Data6
ENDkeyword2

something
data1
data2
data3
data4
data5
data6
data7
data8
ENDkeyword3

关于如何解决这个问题的个人想法:

在我看来,这像是一个非常混乱的输入文件,但我需要那些开始关键字和结束关键字之间的数据,所以我提示用户输入将被分离和搜索的关键字。

StartKeyword1, StartKeyword2, StartKeyword3

太棒了,现在我要提示用户输入 EndKeyword,这样程序就知道什么时候停止写入数据并寻找下一个关键字。

ENDKeyword1, ENDKeyword2, ENDKeyword3

太好了,现在程序基本上有一个关键字列表或数组,现在我需要通过执行搜索方法的函数传递这些关键字。

在这种情况下是

def process(infile, outfile, keywords)

keywords 有两个参数,它们是 (startkeyword, endkeyword)

所以现在我有了这个,我如何能够对这些关键字中的每一个执行一次这个搜索功能。

或者我只是把这个简单的程序复杂化了:/

所以最后一题:

如何抓取带有多个分隔符的输入并在文本文档中搜索拆分的 strings/keywords?

我设法创建了一个 for 循环,以便循环遍历分隔符中的多个输入。

所以例如我的输入是

start_token = tkSimpleDialog.askstring("Serial Number", "What is the Serial?")
splitInput = start_token.split(' ') #Our Delimiter is space in this case

for inputStrings in splitInput:
   process(infile,outfile,((inputStrings,"end token"),))

通过这种方式,我可以有多个字符串输入,这些输入由 space 或逗号分隔,然后使用循环将它们传递给函数以循环遍历输入字符串列表。