首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建多个*.cfg文件

创建多个*.cfg文件
EN

Stack Overflow用户
提问于 2014-08-13 07:54:35
回答 2查看 195关注 0票数 0

我正在处理*.cfg文件。可以在类似gedit的文本编辑器中读取该文件,其格式如下:

代码语言:javascript
复制
% some comments
VAR_1= 1
%
% More comments
ANOTHER_VAR= -8
%
% comments again
VAR_THE_COMEBACK= 10

我想创建多个配置文件,只需更改VAR_1= 1...2...3...10。我设法在没有任何新的python导入的情况下导入了*cfg文件,但是我没有办法只更改这个参数,保存该文件并使用另一个VAR_1值创建另一个文件。

到目前为止,我的代码非常简单:

代码语言:javascript
复制
import os

os.chdir('/home/leonardo/Desktop')

f = open('file.cfg','r') #if I replace r by w I erase the file ....
a =  f.read()
print a.find('1')
a.replace('1','2') #I tried this but. ... :(

f.close()

有什么建议吗?

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2014-08-13 19:01:27

未经测试的代码,但您将获得以下想法:

代码语言:javascript
复制
with open('file.cfg', 'r') as f:
    contents_by_line = f.readlines()
    for var_index, line in enumerate(contents_by_line):
        if line.startswith("VAR_"):
            break
    else:
        raise RuntimeError("VAR_ not found in file")

for var_i, new_cfg_file in ((2,"file2.cfg"),
                              (3, "file3.cfg")): #add files as you want
   with open(new_cfg_file, "w") as fout:
       for i, line in enumerate(contents_by_line):
           if i == var_index:
               fout.write("VAR_1=%d\n" % var_i)
           else:
               fout.write(line)
票数 1
EN

Stack Overflow用户

发布于 2014-08-17 04:55:44

谢谢你们的帮助。我改变了解决问题的方法,因为所有的行都是“相同的”,我只是创建了一个新的行,并替换为我在堆栈中找到的一个函数。我希望有一天它能帮助到某个人。

此脚本将为我的大学期末项目自动执行一系列CFD模拟。它创建了一系列文件夹,名称上有一些模拟条件,将网格文件复制到创建的文件夹以及新的配置文件中,最后一行将运行代码,但我需要在基本模拟设置中运行脚本。

代码还处于初级阶段,我将对其进行修改,使其更具可读性,更易于修改。

谢谢你们!欢迎任何提示,我正在努力提高我的编码技能:)

代码:

代码语言:javascript
复制
import fileinput
import os
import shutil
import subprocess

class stuff:
    root_folder = '/home/leonardo/Desktop/testzone'
    mini_mach = 0.3
    maxi_mach = 1.3
    number_steps = 3
    increment = ((maxi_mach-mini_mach)/number_steps)
    config_file = 'inv_NACA0012.cfg'
    parameter_1 = 'MACH_NUMBER= 0.8'
    parameter_2 = 'CONV_NUM_METHOD_ADJFLOW= JST'
    init_pa = 'MACH_NUMBER= ' #use a space after '='
    init_pa2 = 'CONV_NUM_METHOD_ADJFLOW= ' #use a space after '='
    airfoil = 'NACA0012'
    command1 = 'parallel_computation.py -f ' #use space before the last " ' "
    command2 = '-n 2'
    mesh_file = 'mesh_NACA0012_inv.su2'

class modify:
     def replaceAll(self,files,searchExp,replaceExp):
         for line in fileinput.input(files, inplace=1):
            if searchExp in line:
                line = line.replace(searchExp,replaceExp)
            sys.stdout.write(line)

mod = modify()
stuff = stuff()

for i in xrange(stuff.number_steps):
    mach_name = stuff.airfoil + '_mach_' + `float('%.2f'% stuff.mini_mach)` 
    folder_name = stuff.root_folder + '/' + mach_name
    print 'creating ...' + folder_name
    os.makedirs(folder_name)
    file_father = stuff.root_folder + '/' + stuff.config_file 
    shutil.copy2(file_father,folder_name)
    mesh_father = stuff.root_folder + '/' + stuff.mesh_file
    shutil.copy2(mesh_father,folder_name)
    os.chdir(folder_name)
    pre_mod_file = mach_name + '.cfg'
    os.renames(stuff.config_file,pre_mod_file)
    new_parameter_1 = stuff.init_pa + `float('%.2f'% stuff.mini_mach)`
    new_parameter_2 = stuff.init_pa2 + `float('%.2f'% stuff.mini_mach)`
    mod.replaceAll(pre_mod_file,stuff.parameter_1,new_parameter_1)
    mod.replaceAll(pre_mod_file,stuff.parameter_2,new_parameter_2)
    stuff.mini_mach += stuff.increment
    #subprocess.check_call(stuff.command + pre_mod_file + stuff.command2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25275950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档