簡體   English   中英

復制文本更改某些變量

[英]Copying text changing some variables

我想復制一個這樣的文本(它存儲在一個txt文件中,例如template.txt ):

//
// Pyrolysis of PMMA sample exposed to a 18 kW/m² cone irradiances
//
MODULE PEL_Application
   $DS_external_flux= 16.5e03 // 18 kW/m² en prenant en compte le transfert convectif.
   $DS_DX = 0.005
   $DS_activation_energy = 1.15e+5
   $DS_arrhenius_constant = 7.0e+6
   $DS_Kappa_s = 1000.
   $DS_initial_fuel_mass = 1.50272
   $DS_heat_of_pyrolysis = 2.0e+6
   $DS_T_initial = 304.75
   $DS_gas_refractive_index = 1.0
   $DS_medium_refractive_index = 1.0
END MODULE PEL_Application

#include ( join( "..", "ref.pel" ) )
MODULE PEL_Application
   MODULE PDE_DomainAndFields
      MODULE macro_boundary_conditions
         MODULE BC#inlet1
            MODULE BC#temperature
               type  = "volumetric_pyrolysis#semi_transparent_media"
            END MODULE BC#temperature
         END MODULE BC#inlet1
      END MODULE macro_boundary_conditions
   END MODULE PDE_DomainAndFields
END MODULE PEL_Application

我想替換的值

   $DS_activation_energy = 1.15e+5
   $DS_arrhenius_constant = 7.0e+6

   $DS_activation_energy = new_value_1
   $DS_arrhenius_constant = new_value_2

並將整個文本復制到帶有新值的名為data.txt的新文件中。

請問如何在Python中完成此操作?

先感謝您

希望這對您有用。

import fileinput
import sys

for line in fileinput.input('File.txt', inplace=1):
        if 'string_to_replace' in line:
                line = line.replace('string_to_replace','new_string')
        sys.stdout.write(line)

這應該做。

f = open("template.txt", "r")
g = open("data.txt", "w")
lines = f.readlines()
new_value_1 = "Whatever"
new_value_2 = "Whatever else"
for each in lines:
    if each.strip().startswith("$DS_activation_energy"):
        split_val = each.split("=")
        split_val[-1] = new_value_1
        new_val = "= ".join(split_val) + "\n"
        g.write(new_val)
    elif each.strip().startswith("$DS_arrhenius_constant"):
        split_val = each.split("=")
        split_val[-1] = new_value_2
        new_val = "= ".join(split_val) + "\n"
        g.write(new_val)
    else:
        g.write(each)

您可以做以下事情:

import re

rgx = re.compile('(\A.+?\$DS_activation_energy[ \t]*=[ \t]*)'
                 '[^ \t\r\n]+'
                 '(.+?\$DS_arrhenius_constant[ \t]*=[ \t]*)'
                 '[^ \t\r\n]+'
                 '(.+\Z)',
                 re.DOTALL)

with open('template.txt','rb') as f:
    cont = f.read()

new_value_1,new_value_2 = 10, 892.12

with open('data.txt','wb') as f:
    f.write(rgx.sub('\\1%s\\2%s\\3',cont) % (new_value_1,new_value_2))

這是一個利用“占位符”的解決方案。

template.txt

//
// Pyrolysis of PMMA sample exposed to a 18 kW/m² cone irradiances
//
MODULE PEL_Application
   $DS_external_flux= 16.5e03 // 18 kW/m² en prenant en compte le transfert convectif.
   $DS_DX = 0.005
   $DS_activation_energy = <activation_energy>
   $DS_arrhenius_constant = <arrhenius_constant>
   $DS_Kappa_s = 1000.
   $DS_initial_fuel_mass = 1.50272
   $DS_heat_of_pyrolysis = 2.0e+6
   $DS_T_initial = 304.75
   $DS_gas_refractive_index = 1.0
   $DS_medium_refractive_index = 1.0
END MODULE PEL_Application

#include ( join( "..", "ref.pel" ) )
MODULE PEL_Application
   MODULE PDE_DomainAndFields
      MODULE macro_boundary_conditions
         MODULE BC#inlet1
            MODULE BC#temperature
               type  = "volumetric_pyrolysis#semi_transparent_media"
            END MODULE BC#temperature
         END MODULE BC#inlet1
      END MODULE macro_boundary_conditions
   END MODULE PDE_DomainAndFields
END MODULE PEL_Application

現在,閱讀“ template.txt”並替換值:

with open('template.txt') as input_file:
    template_text = input_file.read()

new_activation_energy = ...
new_arrhenius_constant = ...

new_text = template_text
new_text = new_text.replace('<activation_energy>', new_activation_energy)
new_text = new_text.replace('<new_arrhenius_constant >', new_arrhenius_constant)

with open('new_file.txt', 'w') as ouput_file:
    output_file.write(new_text)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM