2011-05-02 39 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') 

有沒有更好的方法?有沒有簡單的方法來格式化所有這些字符串,但只做一個寫入方法調用?如果上述被認爲是最好的做法,那麼看起來它可能更漂亮一些其他的方式。Python:將多個str.format()行寫入一個文件?

+0

的socket.gethostbyname將被置於一個嘗試套房裏面以後。 ;) – CarpeNoctem 2011-05-02 01:24:43

+0

您可以直接通過字符串格式化來處理空格填充,而不是對其進行硬編碼。 – 2011-05-02 01:26:24

回答

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

但是請注意,你必須加倍你的花括號才能在這裏逃避它們。

+0

以前從來不知道。謝謝! – I82Much 2011-05-02 01:56:31

+0

這很好理解,你肯定回答了我的問題。在修改腳本以使用這種格式後,我最終恢復原狀,因爲額外的複雜性並未使腳本更易於閱讀或編輯。不過我相信我會在未來使用它! – CarpeNoctem 2011-05-02 02:30:06

0

三引號字符串。

f.write('''{} {} 
{}'''.format(1, 2, 3)) 
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')) 
相關問題