Python:将多个str.format()行写入文件?

时间:2011-05-02 01:22:49

标签: python

for host in platforms:
    f = open(host, 'w')
    f.write('define host {\n')
    f.write('    host_name            {}\n'.format(host))
    f.write('    alias                {}\n'.format(host))
    f.write('    display_name         {}\n'.format(host))
    f.write('    address              {}\n'.format(str(socket.gethostbyname(host))))
    f.write('    use                  linux-server\n')
    f.write('    register             1\n')
    f.write('}\n')

有更好的方法吗?是否有一种简单的方法来格式化所有这些字符串但只进行一次写入方法调用?如果以上被认为是最好的做法,那么看起来它可能比其他方式更漂亮。

3 个答案:

答案 0 :(得分:5)

您可以在长三引号字符串中使用命名替换。

def print_host(host, address):
    f = open(host, 'w')
    f.write("""define host {{
        host_name            {host}
        alias                {host}
        display_name         {host}
        address              {address}
        use                  linux-server
        register             1
    }}\n""".format(host=host, address=address))

print_host("myhost", "10.10.10.10")

但请注意,你必须加倍花括号以逃避它们。

答案 1 :(得分:0)

三重字符串。

f.write('''{} {}
{}'''.format(1, 2, 3))

答案 2 :(得分:0)

你最终还原了......你更喜欢这些可能性之一吗? :

def print_host(host,serv,numb, ch = ('define host {{\n'
                                     '    {0:<21}{6}\n'
                                     '    {1:<21}{6}\n'
                                     '    {2:<21}{6}\n'
                                     '    {3:<21}{7}\n'
                                     '    {4:<21}{8}\n'
                                     '    {5:<21}{9}\n'
                                     '}}\n'            ) ):

    f = open(host, 'w')
    f.write(ch.format('host_name','alias','display_name',
                      'address','use','register',
                      host,
                      str(socket.gethostbyname(host)),serv,numb))

def print_host(host,serv,numb):

    tu = ('define host {',
          '    {:<21}{}'.format('host_name',host),
          '    {:<21}{}'.format('alias',host),
          '    {:<21}{}'.format('display_name',host),
          '    {:<21}{}'.format('address',str(socket.gethostbyname(host))),
          '    {:<21}{}'.format('use',serv),
          '    {:<21}{}'.format('register',numb),
          '}\n')

    f = open(host, 'w')
    f.write('\n'.join(tu))

def print_host(host,serv,numb):
    f = open(host, 'w')
    f.writelines(('define host {\n',
                  '    {:<21}{}\n'.format('host_name',host),
                  '    {:<21}{}\n'.format('alias',host),
                  '    {:<21}{}\n'.format('display_name',host),
                  '    {:<21}{}\n'.format('address',str(socket.gethostbyname(host))),
                  '    {:<21}{}\n'.format('use',serv),
                  '    {:<21}{}\n'.format('register',numb),
                  '}\n'))

或(我更喜欢这个更整洁的人)

def print_host(host,serv,numb):
    f = open(host, 'w')
    f.writelines(('define host {\n',
                  '    host_name            {}\n'.format(host),
                  '    alias                {}\n'.format(host),
                  '    display_name         {}\n'.format(host),
                  '    address              {}\n'.format(str(socket.gethostbyname(host))),
                  '    use                  {}\n'.format(serv),
                  '    register             {}\n'.format(numb),
                  '}\n'))