Python 3.x 通过更改单个文件中的值来创建多个文件

Python 3.x 通过更改单个文件中的值来创建多个文件,python-3.x,file,loops,Python 3.x,File,Loops,我有一个名为myfile.txt的文件,如下所示: &cntrl pTopt = 298.15, pdens = 0.997, prcut = 12.0, pion = t, pihot = t, prQM = 5.5, prSM = 5.3, prQI=3.0, piguess = f, pinit = t, pnstep = 5000, pnscale = 100, pnstat = 5, pnout = 5, pnrst = 5, pioutc = t, pioutv = t,

我有一个名为myfile.txt的文件,如下所示:

&cntrl
pTopt = 298.15, pdens = 0.997, prcut = 12.0, pion = t,
pihot = t, prQM = 5.5, prSM = 5.3, prQI=3.0, piguess = f,
pinit = t, pnstep = 5000, pnscale = 100,
pnstat = 5, pnout = 5, pnrst = 5,  pioutc = t, pioutv = t, pnoutc=5,
pnoutv = 5,
msolute = t, nosa = 1,  pichrg = t
gfileOut =   'as-1.out',
gfileEnout = 'as-1.en',
gfileInfo =  'as-1.info',
gfileStart = 'init.in',
gfileRst =   'as-1.rst',
gfileTraj =  'as-1.traj',
gfileVeloc = 'as-1.vel',
gfileQmen =  'as-1.qmen'
&end
#!/usr/bin/python3
for i in range(10):
   f = open('file' +str(i)+'.txt','w')
   f.write("&cntrl pTopt = 298.15, pdens = 0.997, prcut = 12.0,pion=t,"+"\n"+
   "pihot = t, prQM = 5.5, prSM = 5.3, prQI=3.0, piguess = f,"+"\n"+
   "pinit = t, pnstep = 5000, pnscale = 100,"+"\n"+"pnstat = 5, pnout = 5,         
    pnrst = 5,  pioutc = t, pioutv = t, pnoutc = 5, pnoutv = 5,"+"\n"+
   "msolute = t, nosa = 1,  pichrg = t"+"\n"+'gfileOut =   as-' +str(i)+ ".out,"+"\n"+
   'gfileEnout = as-' +str(i)+ '.en,'+"\n"+'gfileInfo =  as-' +str(i)+".info,"+"\n"+
   'gfileStart = init' +str(i)+ ".in,"+"\n"+'gfileRst =   as' +str(i)+ ".rst,"+"\n"+
   'gfileTraj =  as' +str(i)+ ".traj,"+"\n"
   +'gfileVeloc = as' +str(i)+ ".vel,"+"\n"+'gfileQmen =  as' +str(i)+   '.qmen'+"\n"+"&end ")
   f.close()
使用上述给定的单个文件,我想创建10个文件,但我想操纵最后8个变量的值,使每个新文件中的变量值随文件更改的数量而变化,即如果创建了10个文件,则最后8个变量(如tength文件中的gfileOut)的值应为“as-10.out”。 为此,我提供了以下代码:

&cntrl
pTopt = 298.15, pdens = 0.997, prcut = 12.0, pion = t,
pihot = t, prQM = 5.5, prSM = 5.3, prQI=3.0, piguess = f,
pinit = t, pnstep = 5000, pnscale = 100,
pnstat = 5, pnout = 5, pnrst = 5,  pioutc = t, pioutv = t, pnoutc=5,
pnoutv = 5,
msolute = t, nosa = 1,  pichrg = t
gfileOut =   'as-1.out',
gfileEnout = 'as-1.en',
gfileInfo =  'as-1.info',
gfileStart = 'init.in',
gfileRst =   'as-1.rst',
gfileTraj =  'as-1.traj',
gfileVeloc = 'as-1.vel',
gfileQmen =  'as-1.qmen'
&end
#!/usr/bin/python3
for i in range(10):
   f = open('file' +str(i)+'.txt','w')
   f.write("&cntrl pTopt = 298.15, pdens = 0.997, prcut = 12.0,pion=t,"+"\n"+
   "pihot = t, prQM = 5.5, prSM = 5.3, prQI=3.0, piguess = f,"+"\n"+
   "pinit = t, pnstep = 5000, pnscale = 100,"+"\n"+"pnstat = 5, pnout = 5,         
    pnrst = 5,  pioutc = t, pioutv = t, pnoutc = 5, pnoutv = 5,"+"\n"+
   "msolute = t, nosa = 1,  pichrg = t"+"\n"+'gfileOut =   as-' +str(i)+ ".out,"+"\n"+
   'gfileEnout = as-' +str(i)+ '.en,'+"\n"+'gfileInfo =  as-' +str(i)+".info,"+"\n"+
   'gfileStart = init' +str(i)+ ".in,"+"\n"+'gfileRst =   as' +str(i)+ ".rst,"+"\n"+
   'gfileTraj =  as' +str(i)+ ".traj,"+"\n"
   +'gfileVeloc = as' +str(i)+ ".vel,"+"\n"+'gfileQmen =  as' +str(i)+   '.qmen'+"\n"+"&end ")
   f.close()

上面给出的代码生成了正确的输出,但是我需要一种方法来读取myfile.txt并更改上面提到的最后八个变量的值,然后使用此文件创建十个新文件

str.format处理要写入每个文件的字符串插入

# Write the files.
for i in range(1, 11):
   with open('file' +str(i)+ '.txt','w') as f:
       f.write(
           ('&cntrl pTopt = 298.15, pdens = 0.997, prcut = 12.0, pion=t,\n'
           'pihot = t, prQM = 5.5, prSM = 5.3, prQI=3.0, piguess = f,\n'
           'pinit = t, pnstep = 5000, pnscale = 100,\n'
           'pnstat = 5, pnout = 5, pnrst = 5,  pioutc = t, pioutv = t, pnoutc = 5, pnoutv = 5,\n'
           'msolute = t, nosa = 1, pichrg = t\n'
           'gfileOut =   as-{index}.out,\n'
           'gfileEnout = as-{index}.en,\n'
           'gfileInfo =  as-{index}.info,\n'
           'gfileStart = init{index}.in,\n'
           'gfileRst =   as{index}.rst,\n'
           'gfileTraj =  as{index}.traj,\n'
           'gfileVeloc = as{index}.vel,\n'
           'gfileQmen =  as{index}.qmen\n'
           '&end ').format(index=i))
注意:字符串包含
{index}
,该值由范围(1,10)设置的i值替换

编辑:由于误解了第一条评论所提示问题的细节,因此重新发布。对不起


编辑:查看需要从文件中读取的内容,所以这可能会有所帮助

template.txt:

&cntrl pTopt = 298.15, pdens = 0.997, prcut = 12.0, pion=t,
pihot = t, prQM = 5.5, prSM = 5.3, prQI=3.0, piguess = f,
pinit = t, pnstep = 5000, pnscale = 100,
pnstat = 5, pnout = 5, pnrst = 5,  pioutc = t, pioutv = t, pnoutc = 5, pnoutv = 5,
msolute = t, nosa = 1, pichrg = t
gfileOut =   as-{index}.out,
gfileEnout = as-{index}.en,
gfileInfo =  as-{index}.info,
gfileStart = init{index}.in,
gfileRst =   as{index}.rst,
gfileTraj =  as{index}.traj,
gfileVeloc = as{index}.vel,
gfileQmen =  as{index}.qmen
&end
主脚本:

# Read template file.
with open('template.txt') as r:
    content = r.read()

# Write the files.
for i in range(1, 11):
   with open('file' +str(i)+ '.txt','w') as f:
       f.write(content.format(index=i))

它没有按要求工作,它正在为第一个文件生成a1-a7,为第二个文件生成b1-b7,并以相同的方式为最后一个文件生成j1-j7。但是我要求用相同的数字对所有提到的八个变量进行编号,这将是文件的编号。此外,我也并没有要求在变量中添加任何字母,比如a-z。我误解了问题的细节。很抱歉以前的答案太糟糕了,我把它刮了下来,重新发布了新代码。通知我这次是否理解得更好。