Мне нужно отредактировать определенный файл для исследования DoE. Файл в формате:
1 Wall1
roughness 0.0
velocity 0.0
temperature "temperature.file"
########
2 Wall2
roughness 0.0
velocity 0.0
temperature "temperature.file"
########
3 Wall3
roughness 0.0
velocity 0.0
temperature "temperature.file"
########
4 Wall4
roughness 0.0
velocity 0.0
temperature 34.1
########
5 Roof
roughness 0.0
velocity 0.0
temperature "temperature.file"
########
Для DoE я хотел бы изменить одну или несколько записей «temperature.file» (которые являются пространственно изменяющимся температурным полем региона) для каждого случая. Так, например, в случае 2 файл температуры Wall2 будет изменен на «Temperature2.file». Затем программа узнает, что нужно найти новый файл вместо исходного.
Я установил вложенный цикл for, но борюсь с файловым вводом / выводом. Код, который у меня сейчас есть:
if m == 2:
with open(newfolder2+'/walls.in','r') as file:
filedata = file.readlines()
for line in filedata:
if 'Wall2' in line:
for line in filedata:
if 'temperature' in line:
print line
line = line.replace('temperature.file','temperature2.file')
print line
break
# file.seek(0)
with open(newfolder2+'/walls.in','w') as file:
file.writelines(filedata)
Так что, по сути, я хочу найти линию, где происходит "Wall2", затем искать строку с температурой после Wall2, затем изменить ее, и только строку "temperature.file" этой строки на "temperature2.file". Затем выйдите из файла и затем запишите в файл, создав тем самым новый входной файл для этого конкретного случая.
Первая строка печати, которую я имею, распечатывает исходную строку, а код второй строки печати также правильно печатает измененную строку. Однако кажется, что данные файла не были успешно записаны обратно в файл.
Что, кажется, идет не так?
Альтернативный метод, вместо всех вложенных циклов для поиска конкретной строки, я думал, это просто использовать опцию file.seek (). Строки и общая длина файла wall.in останутся прежними, поэтому я могу просто перейти к этой конкретной строке, чтобы изменить строку "temperature.in". Это лучший подход? Я никогда не пробовал этого, поэтому некоторые примеры кода будут с благодарностью.
Спасибо всем большое!