Python 提取两个分隔符之间的字符串

Python 提取两个分隔符之间的字符串,python,string,file,find,Python,String,File,Find,我试图在两个分隔符之间提取一些单词。它适用于脚本找到这些分隔符的文件,但对于其他文件,代码提取所有文件 例如: 文件00.txt: 文件01.txt: 我想打开两个或更多类似于这两个文件的文件,并仅提取以下文件之间的单词: “错误值”和“范围” 我的代码适用于01.txt文件,但不适用于00.txt文件(我认为这是因为它找不到分隔符,所以他会打印所有内容。我如何修复它 def get_path(): #return the path of the selected file(s) ro

我试图在两个分隔符之间提取一些单词。它适用于脚本找到这些分隔符的文件,但对于其他文件,代码提取所有文件

例如:

文件00.txt:

文件01.txt:

我想打开两个或更多类似于这两个文件的文件,并仅提取以下文件之间的单词: “错误值”和“范围”

我的代码适用于01.txt文件,但不适用于00.txt文件(我认为这是因为它找不到分隔符,所以他会打印所有内容。我如何修复它

def get_path(): #return the path of the selected file(s)

    root = Tk()
    i= datetime.datetime.now()
    day = i.day
    month=i.month
    root.filename =  filedialog.askopenfilenames(initialdir = "Z:\SGI\SYNCBBG",title = "Select your files",filetypes = (("Fichier 1","f6365tscf.SCD*"+str(month)+str(day)+".1"),("all files",".*")))
    root.withdraw()
    return (root.filename)

def extraction_error(file): 
    f=open(file,'r')
    file=f.read()
    f.close()
    start = file.find('Bad value') +9
    end = file.find('SPAN', start)
    return(file[start:end])


paths=get_path()
cpt=len(paths)
for x in range(0,cpt):
 print(extraction_error(paths[x]))


Output : saved qshfqs illjQNqdj iohqsijqsd qsoiqsdq
         okkkk 
因此,在本例中,我只想提取'okkkk',而不是为另一个文件打印'saved…'


提前感谢您在extraction\u error函数中提供的帮助,您可能需要测试是否可以找到以下两个关键字:

    start = file.find('Bad value') # remove + 9 here, put it later
    end = file.find('SPAN', start)
    if start != -1 and end != -1: # test if key words can be found, -1 for not found:
        return(file[start+9:end])
    else:
        return ""
如果在字符串中找不到参数,则返回
-1
,例如:

print "abcd".find("e")  # -1
您可以在返回之前检查结果:

start = file.find('Bad value') + 9
end = file.find('SPAN', start)
if start == -1 or end == -1:
    return '' # Or None
return(file[start:end])

您正在打印某些内容,因为您正在向开始变量添加8。如果找不到字符串,Find将返回负数。因此,您最终要做的是打印[7:-1]中的元素。我会在打印语句之前添加一条if语句:

start = file.find('Bad value')
end = file.find('SPAN', start)
if start != -1 and end != -1:
    print(file[start + 9: end])
使用re:

import re

def get_text(text):
    pattern= r'.+(Bad value)(.+)(SPAN).+'
    r=re.match(pattern,text)
    if r!=None and len(r.groups()) == 3:
        print(r.groups()[1])


lines = [
'jkhjkl dbdqs ihnzqid Bad value okkkk    SPAN sfsdf didjsfsdf'
,'ghghujh']

for line in lines:
     get_text(line)
输出:

okkkk

这是一个答案吗?谢谢天云,它工作得很好。现在我看到在一些文件中,我想提取的单词出现了好几次。但我的功能只是提取它找到的第一个单词并退出。我如何修复它?提前谢谢
import re

def get_text(text):
    pattern= r'.+(Bad value)(.+)(SPAN).+'
    r=re.match(pattern,text)
    if r!=None and len(r.groups()) == 3:
        print(r.groups()[1])


lines = [
'jkhjkl dbdqs ihnzqid Bad value okkkk    SPAN sfsdf didjsfsdf'
,'ghghujh']

for line in lines:
     get_text(line)
okkkk