2011-05-02 1 views
0
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') 

Y a-t-il un meilleur moyen? Existe-t-il un moyen simple de formater toutes ces chaînes, mais seulement un appel de méthode write? Si ce qui précède est considéré comme une bonne pratique, il semble que cela pourrait être plus joli d'une autre manière.Python: écrit plusieurs lignes str.format() dans un fichier?

+0

Le socket.gethostbyname sera placé dans une suite d'essayer plus tard . ;) – CarpeNoctem

+0

vous pouvez être en mesure de faire avec le remplissage de l'espace par la mise en forme de chaîne directement, au lieu de le coder en dur. –

Répondre

5

Vous pouvez utiliser des substitutions nommées dans une chaîne longue à guillemets simples.

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") 

Mais notez que vous devez doubler vos accolades pour les échapper ici.

+0

Je ne le savais jamais auparavant. Merci! – I82Much

+0

C'est bon à savoir et vous avez certainement répondu à ma question. Après avoir modifié le script pour utiliser ce format, j'ai fini par revenir en arrière, car la complexité supplémentaire n'a pas facilité la lecture ou la modification du script. Je suis sûr que je vais en profiter à l'avenir! – CarpeNoctem

0

Chaînes entre guillemets.

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

Vous avez fini par revenir en arrière ... Préféreriez-vous une de ces possibilités? :

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)) 

ou

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)) 

ou

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')) 

ou (je préfère ce un plus propre)

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')) 
Questions connexes