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

时间:2015-08-19 18:37:54

标签: python search text io delimiter

到目前为止,我已经在这个网站上得到了很多帮助,我对Python编程非常陌生,并且自己进行了stackoverflow。

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

  • 允许用户在一个输入提示中输入多个关键字(关键字将用分隔符分隔,例如,' ./等。
  • 然后程序会搜索这些关键字并在两者之间打印,我们会在重要数据
  • 之间调用此数据
  • 然后它会将此重要数据打印到新文本文件中供用户阅读。

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

当前代码:

这是我当前代码的示例:

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

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

在我看来,这似乎是一个非常混乱的输入文件,但我需要在Start Keyword和End关键字之间的数据,所以我提示用户输入将被分隔和搜索的关键字。

  

StartKeyword1,StartKeyword2,StartKeyword3

现在很棒我会提示用户输入EndKeyword,以便程序知道何时停止写入数据并查找下一个关键字。

  

ENDKeyword1,ENDKeyword2,ENDKeyword3

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

在这种情况下是

  

def process(infile,outfile,keywords)

关键字有两个参数,分别是(startkeyword,endkeyword)

所以现在我已经知道如何使用这些关键字中的每一个执行此搜索功能一次。

或许我只是简单地使这个简单程序复杂化:/

结束问题:

如何使用多个分隔符获取输入并在文本文档中搜索这些分割字符串/关键字?

1 个答案:

答案 0 :(得分:0)

我设法创建了一个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"),))

这样我可以有多个字符串输入,用空格或逗号分隔,然后通过一个函数传递它们,循环遍历输入字符串列表。