0

リストのリストにいくつかのデータがあります。フォーマットを使用して表に均等に印刷しようとしていますが、長さが異なると実際にはうまくいきません。これを簡単に行う方法はありますか?または、各列の最大値を計算し、他の列にスペースを埋め込むなど、厄介なことをする必要がありますか?

 table_data = [['vlan1', '0013.F200.0058', '192.168.2.2'],
               ['vlan20', '0013.F200.0058', '192.168.30.2'],
               ['vlan20', '0010.600a.7026', '192.168.30.4'], 
               ['vlan20', '70ca.9b99.6a82', '192.168.30.1'],
               ['vlan100', '0013.F200.0058', '192.168.110.2']]   


for i in table_data:
    interface,mac,ip = i
    print "Internet  {} {:>18s} {:>7s} {:>8s}".format(ip, mac,'ARPA' ,interface)    


Protocol  Address             Hardware Addr   Type   Interface                  
Internet  192.168.2.2     0013.F200.0058    ARPA     vlan1                       
Internet  192.168.30.2     0013.F200.0058    ARPA    vlan20                      
Internet  192.168.30.4     0010.600a.7026    ARPA    vlan20                      
Internet  192.168.30.1     70ca.9b99.6a82    ARPA    vlan20                      
Internet  192.168.110.2     0013.F200.0058    ARPA   vlan100  
4

5 に答える 5

1
table_data = [['vlan1',   '0013.F200.0058', '192.168.2.2'],
               ['vlan20', '0013.F200.0058', '192.168.30.2'],
               ['vlan20', '0010.600a.7026', '192.168.30.4'], 
               ['vlan20', '70ca.9b99.6a82', '192.168.30.1'],
               ['vlan100','0013.F200.0058', '192.168.110.2']]   

print "Protocol  Address          Hardware Addr   Type   Interface  "
for i in table_data:
    interface,mac,ip = i
    print "Internet  {:15} {:>15} {:^7s} {}".format(ip, mac,'ARPA' ,interface) 

出力:

Protocol  Address          Hardware Addr   Type   Interface  
Internet  192.168.2.2      0013.F200.0058  ARPA   vlan1
Internet  192.168.30.2     0013.F200.0058  ARPA   vlan20
Internet  192.168.30.4     0010.600a.7026  ARPA   vlan20
Internet  192.168.30.1     70ca.9b99.6a82  ARPA   vlan20
Internet  192.168.110.2    0013.F200.0058  ARPA   vlan100
于 2013-06-14T15:34:20.517 に答える
1

ヘッダーもフォーマットするバリエーション:

header = [['Protocol', 'Address', 'Hardware Addr', 'Type', 'Interface']]
table_data = [['vlan1', '0013.F200.0058', '192.168.2.2'],
              ['vlan20', '0013.F200.0058', '192.168.30.2'],
              ['vlan20', '0010.600a.7026', '192.168.30.4'], 
              ['vlan20', '70ca.9b99.6a82', '192.168.30.1'],
              ['vlan100','0013.F200.0058', '192.168.110.2']]
for i in header + table_data:
print "{}  {:15} {:<14} {:^7s} {}".format(
    *i if i[3:] else ('Internet', i[2], i[1], 'ARPA', i[0]))
于 2013-06-14T16:27:58.433 に答える
0

若干の変動:

for i in table_data:
    interface,mac,ip = i

    ip_aligned = "{:>3s}.{:>3s}.{:>3s}.{:>3s}".format(*ip.split('.'))
    mac_normalized = mac.lower() # some MAC addr are lower case other upper case

    print("Internet  {:16s} {:>18s} {:>7s} {:>8s}".format(
                      ip_aligned,
                      mac_normalized,
                      'ARPA'
                      ,interface
          ))

あなたの好みに応じて多かれ少なかれ読みやすい:

Internet  192.168.  2.  2      0013.f200.0058    ARPA    vlan1
Internet  192.168. 30.  2      0013.f200.0058    ARPA   vlan20
Internet  192.168. 30.  4      0010.600a.7026    ARPA   vlan20
Internet  192.168. 30.  1      70ca.9b99.6a82    ARPA   vlan20
Internet  192.168.110.  2      0013.f200.0058    ARPA  vlan100
于 2013-06-14T15:54:02.473 に答える