【发布时间】:2015-08-19 18:37:53
【问题描述】:
到目前为止,我已经在这个网站上获得了很多帮助,我对 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
关于如何解决此问题的个人想法:
在我看来,这似乎是一个非常混乱的输入文件,但我需要这些起始关键字和结束关键字之间的数据,所以我提示用户输入将被分隔和搜索的关键字。
StartKeyword1、StartKeyword2、StartKeyword3
现在我会提示用户输入 EndKeyword,以便程序知道何时停止写入数据并寻找下一个关键字。
ENDKeyword1、ENDKeyword2、ENDKeyword3
太好了,所以现在程序基本上有一个关键字列表或数组,现在我需要通过执行搜索方法的函数传递这些关键字。
在这种情况下是
def 进程(infile,outfile,关键字)
keywords有两个参数(startkeyword, endkeyword)
既然我有了这个,我将如何使用这些关键字中的每一个执行一次此搜索功能。
或者我只是把这个简单的程序复杂化了:/
所以最后的问题:
如何获取具有多个分隔符的输入并在文本文档中搜索那些拆分的字符串/关键字?
【问题讨论】:
-
我刚刚滚动了 3 页,没有看到一个问号。 How do I ask a good question?
-
@CoryKramer 有点超前,请参阅编辑。本质上,我只想搜索具有多个字符串的文本文档,并在找到每个字符串/关键字时打印出结果。我有搜索设置的功能我只需要弄清楚如何拆分输入字符串,例如
keyword1,keyword2,keyword3,然后通过搜索功能传递这三个或更多关键字
标签: python search text io delimiter