使用Python,我需要在文件中搜索字符串并使用它来定义变量。如果该文件中没有匹配项,则会搜索另一个文件。我现在只有2个文件,但处理更多是一个加号。这是我现在拥有的:
regex = re.compile(r'\b[01] [01] '+dest+r'\b')
dalt=None
with open(os.path.join('path','to','file','file.dat'), 'r') as datfile:
for line in datfile:
if regex.search(line):
params=line.split()
dalt=int(params[1])
break
if dalt is None:
with open(os.path.join('different','file','path','file.dat'), 'r') as fdatfile:
for line in fdatfile:
if regex.search(line):
params=line.split()
dalt=int(params[1])
break
if dalt is None:
print "Not found, giving up"
dalt=0
有更好的方法吗?我觉得循环会起作用,但我不确定究竟是怎么回事。我确信还有一些方法可以使代码更加安全",除了答案之外,还有其他建议。
我正在编写Python 2.73
根据要求,以下是我要搜索的示例:
我将要搜索的字符串是" KBFI" (dest
),我想找到这一行:
1 21 1 0 KBFI Boeing Field King Co Intl
之前我有if dest in line
,但在某些情况下,dest
可能出现在其他行中。所以我切换到一个正则表达式,它也匹配dest
之前的两位数,可以是0或1.这似乎至少在大多数情况下工作正常(尚未发现任何不良情况) 。虽然基于the spec,但据说正确的行将以1
开头,因此正确的搜索可能是:
r'^1\s.*'+dest
但我还没有测试过。我想一个相当精确的搜索是:
r'^1\s+\d{,5}\s+[01]\s+[01]\s+'+dest+r'\b'
由于字段为1
,最多为五位数字(这是我需要返回的),0或1,0或1,然后是字符串I'我正在寻找。 (我还没有做很多正则表达式,所以我正在学习)
答案 0 :(得分:1)
fileinput
可以获取文件列表:
regex = re.compile(regexstring)
dir1 = "path_to_dir/file.dat"
dir2 = "path_to_dir2/file.dat"
import fileinput
import os
for line in fileinput.input([dir1,dir2]): # pass all files to check
if regex.search(line):
params = line.split()
dalt = int(params[1])
break # found it so leave the loop
print(dalt)
else: # if we get here no file had what we want
print "Not found, giving"
如果您希望某些具有相似名称的目录中的所有文件都使用glob和您想要匹配的任何模式:
import glob
dir1 = "path_to_dir/"
dir2 = "path_to_dir2/"
path1_files = glob.glob(dir1+"file*.dat")
path2_files = glob.glob(dir2+"file*.dat")
您可能实际上也不需要正则表达式,简单的in line
就足够了。