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 может присутствовать в любом из файлов.поиск массива ключевых слов в массиве файлов
Может ли кто-нибудь предложить изменения в коде, который я написал, чтобы он работал эффективно? Благодаря
Я могу сделать предложение сделать код работать _at all_: 'file' объекты являются итераторами, и как только вы его повторили один раз, он исчерпан, поэтому вы можете найти только совпадения на самой первой итерации вашего самого внешнего цикла , Чтобы исправить это, вы можете поменять циклы 'for i' и' for lines' или открыть файл заново в цикле 'for i' или кэшировать содержимое файлов в списках, если они не слишком большие. –
Кроме того, для всех этих 'for x in range (len (...))' вы должны делать 'for x in ...' непосредственно, или 'for i, x в enumerate (...)', если вы нужен индекс. Кроме того, что такое 'linecache'? –
Не могли бы вы отредактировать вопрос, чтобы включить небольшой образец ввода и вывода? –