Python 提取两个分隔符之间的字符串
我试图在两个分隔符之间提取一些单词。它适用于脚本找到这些分隔符的文件,但对于其他文件,代码提取所有文件 例如: 文件00.txt: 文件01.txt: 我想打开两个或更多类似于这两个文件的文件,并仅提取以下文件之间的单词: “错误值”和“范围” 我的代码适用于01.txt文件,但不适用于00.txt文件(我认为这是因为它找不到分隔符,所以他会打印所有内容。我如何修复它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
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