2014-10-30 86 views
0

我遇到问题。我试图在python中打印一系列列表以使其与垂直对齐。我的代码是:如何在python中对齐字符串而不创建表格

def show(): 
    book = "data.txt" 
    f = open(book,'r') 
    line = f.readlines() 
    f.close() 
    x=0 
    z = '' 
    l = [] 
    x = [] 
    i = 0 
    starting = '{:>4} {:>15} {:>15}'.format('Name', "Gender", "Year") 
    print(starting) 
    for p in line: 
     p = p.replace(',',' ') 
     x = p.index(' ') 
     name = p[0:x] 
     a = p.index('e 1') 
     gender = p[x:a+1] 
     year = p[(a+2):] 
     if len(name) == 3: 
      line_new = '{:>2} {:>15} {:>15}'.format(name, gender, year) 
     else: 
      line_new = '{:>5} {:>15} {:>15}'.format(name, gender, year) 
     print(line_new) 

的问题是,我想拥有的东西,如:

enter image description here 我希望把左边的所有名称(和我没有问题),然后,在性别,我想都在同一垂直和同样的事情,创造性别平等的清单年

+0

好吧,问自己一个问题 - 对齐文字意味着什么?这怎么能实现? – 2014-10-30 17:48:11

+0

你会得到什么输出?你的文件的内容是什么样的? – smac89 2014-10-30 17:48:54

+0

在这里不那么容易表达。我会尝试将我的输出 – pp94 2014-10-30 17:49:31

回答

0

未经检验的,但试试这个:

import itertools 
with open("data.txt") as data: 
    pep = [line.strip().split(',') for line in data] 
    widths = [len(max(r, key=len)) for r in itertools.izip_longest(*pep, fillvalue="")] 

    print "%-{0}%s%-{1}%s%-{2}%s".format(widths[0], widths[1], widths[2])\ 
    %("Name", "Gender", "Year") 

    print "\n".join(["%-{0}%s%-{1}%s%-{2}%s".format(widths[0], widths[1], widths[2])\ 
    %(attr[0], attr[1], attr[2]) for attr in pep])