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可能出现在任何一个文件中。
有人建议修改我编写的代码,以使其有效工作吗?谢谢
答案 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
列表,为您提供filename
,line_number
,search_matched
以及该行中的第一个非空格值您搜索的所有文件。