如何将每个循环结果打印到单个文件?

时间:2019-04-19 01:12:41

标签: python loops printing

我正在为Modeller运行模型评估协议。它评估每个模型并将其结果写入单独的文件。但是,我必须为每个模型运行它并写入单个文件。

这是原始代码:

from modeller import *
from modeller.scripts import complete_pdb

log.verbose()    # request verbose output
env = environ()
env.libs.topology.read(file='$(LIB)/top_heav.lib') # read topology
env.libs.parameters.read(file='$(LIB)/par.lib') # read parameters

# read model file
mdl = complete_pdb(env, 'TvLDH.B99990001.pdb')

# Assess all atoms with DOPE:
s = selection(mdl)
s.assess_dope(output='ENERGY_PROFILE NO_REPORT', file='TvLDH.profile',
              normalize_profile=True, smoothing_window=15)

我添加了一个循环以在一次运行中评估每个模型,但是我正在创建多个文件(每个模型一个),我想将所有评估结果打印在一个文件中

from modeller import *
from modeller.scripts import complete_pdb

log.verbose()    # request verbose output
env = environ()
env.libs.topology.read(file='$(LIB)/top_heav.lib') # read topology
env.libs.parameters.read(file='$(LIB)/par.lib') # read parameters

#My loop starts here
for i in range (1,1001):
    number=str(i)
    if i<10:
        name='000'+number
    else:
        if i<100:
           name='00'+number
        else:
             if i<1000:
                name='0'+number
             else:
                  name='1000'

# read model file
mdl = complete_pdb(env, 'TcP5CDH.B9999'+name+'.pdb')

# Assess all atoms with DOPE: this is the assesment that i want to print in the same file
s = selection(mdl)
savename='TcP5CDH.B9999'+name+'.profile'
s.assess_dope(output='ENERGY_PROFILE NO_REPORT', 
              file=savename,
              normalize_profile=True, smoothing_window=15)

由于我是编程新手,所以任何帮助都将非常有帮助!

1 个答案:

答案 0 :(得分:0)

欢迎:-)看起来你很亲密。让我们向您介绍如何使用python函数和.format()语句。

您的原件上有一条注释行# read model file,看起来它可能是一个函数,因此让我们尝试一下。可能看起来像这样。

from modeller import *
from modeller.scripts import complete_pdb

log.verbose()    # request verbose output
# I'm assuming this can be done just once
# and re-used for all your model files...
# (if not, the env stuff should go inside the
# read_model_file() function.
env = environ()
env.libs.topology.read(file='$(LIB)/top_heav.lib') # read topology
env.libs.parameters.read(file='$(LIB)/par.lib') # read parameters

def read_model_file(file_name):
    print('--- read_model_file(file_name='+file_name+') ---')
    mdl = complete_pdb(env, file_name)
    # Assess all atoms with DOPE:
    s = selection(mdl)
    output_file = file_name+'.profile'
    s.assess_dope(
        output='ENERGY_PROFILE NO_REPORT',
        file=output_file,
        normalize_profile=True,
        smoothing_window=15)

for i in range(1,1001):
    file_name = 'TcP5CDH.B9999{:04d}pdb'.format(i)
    read_model_file(file_name)

使用.format()我们可以获得10个多次if语句检查? 100? 1000? 基本上.format()会将 {} 大括号替换为参数。 它可能非常复杂,但您无需一概而论。

示例: 'Hello {}!'.format('world')产生Hello world!{:04d}的东西使用格式化,基本上说:“请制作一个4个字符的宽数字子字符串并将其填充为零,因此您应该得到'0001', ..., '0999', '1000'。 只需{:4d}(前导零)就可以为您填充空格(例如' 1', ..., ' 999', '1000')。 以下是有关零填充的更多信息:Display number with leading zeros