搜索多个文件以定义变量

时间:2015-01-21 17:04:53

标签: python

使用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'我正在寻找。 (我还没有做很多正则表达式,所以我正在学习)

1 个答案:

答案 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就足够了。