在文件数组中搜索关键字数组

时间:2016-03-14 10:52:01

标签: python python-2.7

inputs=[]
def pickinputs():         
search_chars=['WaveDir', 'WaveHs', 'WaveTp', 'WtrDpth', 'Number of mooring lines', 'Reference height', 'Reference wind speed', 'Grid height', 'Grid width', 'Analysis time']        
files=[file_platform, file_wind, file_primary]
m=0
while True:
    inputfile=open(files[m],'r')        
    for i in range(len(search_chars)):        
        j=1
        for lines in inputfile:
            if search_chars[i] in lines:
                line= linecache.getline(files[m], j)
                line_split = line.split(' ')
                #print (line_split)
                for k in range(len(line_split)):
                    if line_split[k]!= "":
                        break
                    val=line_split[k+1]
                inputs.append(val)
            j=j+1
    m=m+1

目标是在文件中搜索search_chars的每个文本并在该文件中获取其行号(在文件中)并拆分以读取第一个非空格值(它是一个数字)并将其附加到输入。我可以用更大的方式写同样的东西,但我想以有效的方式做到这一点。 search_chars可能出现在任何一个文件中。

有人建议修改我编写的代码,以使其有效工作吗?谢谢

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

inputs = []
search_strings = ['WaveDir', 'WaveHs', 'WaveTp', 'WtrDpth', 'Number of mooring lines', 'Reference height', 'Reference wind speed', 'Grid height', 'Grid width', 'Analysis time']
files = ['input.txt', 'input2.txt']

for filename in files: 
    with open(filename) as f_input:
        for line_number, line in enumerate(f_input, start=1):
            for search in search_strings:
                if search in line:
                    first_non_space = line.strip().split(' ')[0]
                    inputs.append((filename, line_number, search, first_non_space))
                    #print filename, line_number, search

for filename, line_number, search_matched, first_non_space in inputs:            
    print filename, line_number, search_matched, first_non_space

这将构建包含所有匹配项的inputs列表,为您提供filenameline_numbersearch_matched以及该行中的第一个非空格值您搜索的所有文件。