2015-10-20 155 views
0

我想写打印出输入文件的功能:如看到左侧的“table.txt”:打印内容转换成表格形式

enter image description here

成格式如图在图像的右侧。

我曾尝试:

f = open("table1.txt",'r') 
for aline in f: 
    values = aline.split(',') 
    print('Team:',values[0],', Points:',values[1],', Diff:',int(values[2])-int(values[3]),'Goals:',values[2]) 
f.close() 

,输出:

Team: FC Ingolstadt 04 , Points: 13 , Diff: -2 Goals: 4 
Team: Hamburg , Points: 9 , Diff: -2 Goals: 8 
Team: SV Darmstadt 98 , Points: 9 , Diff: -1 Goals: 8 
Team: Mainz , Points: 9 , Diff: -3 Goals: 6 
Team: FC Augsburg , Points: 4 , Diff: -5 Goals: 7 
Team: Werder Bremen , Points: 6 , Diff: -5 Goals: 7 
Team: Borussia Moenchengladbach , Points: 6 , Diff: -6 Goals: 9 
Team: Hoffenheim , Points: 5 , Diff: -4 Goals: 8 
Team: VfB Stuttgart , Points: 4 , Diff: -8 Goals: 9 
Team: Schalke 04 , Points: 16 , Diff: 11 Goals: 14 
Team: Hannover 96 , Points: 2 , Diff: -12 Goals: 6 
Team: Borrusia Dortmund , Points: 16 , Diff: 11 Goals: 15 
Team: Bayern Munich , Points: 18 , Diff: 16 Goals: 18 
Team: Bayer Leverkusen , Points: 14 , Diff: 3 Goals: 11 
Team: Eintracht Frankfurt , Points: 9 , Diff: 4 Goals: 13 
Team: Hertha BSC Berlin , Points: 14 , Diff: 1 Goals: 5 
Team: 1. FC Cologne , Points: 13 , Diff: 0 Goals: 10 
Team: VfB Wolfsburg , Points: 14 , Diff: 4 Goals: 10 

但你如何打印值,使行编号,列有标题:“队,积分,差异,目标“?

+0

你可以上传示例文本文件 –

+0

这已经在[stackoverflow](http://stackoverflow.com/questions/9535954/python-printing-lists-as-tabular-data)之前回答。 – CodeMonkey

+0

尚未回答。 – Newbie

回答

1

我不知道这是否是你所需要的东西,但我想你想可能是这样的格式:

contents = [] 
with open('tables.dat', 'r+') as f: 
    for line in f: 
     contents.append(line.split(',')) 

max_name_length = max([len(line[0]) for line in contents]) 

print(" Team      Points  Diff  Goals  \n") 
print("--------------------------------------------------------------------------\n") 
for i, line in enumerate(contents): 
    line = [el.replace('\n', '') for el in line] 
    print("{i:>3} {0:<{fill_width}} {1:>3} {2:>3} {3:>3}".format(i=i, *line, fill_width=max_name_length)) 

而且这里是一些示例输出:

Team      Points  Diff  Goals  

-------------------------------------------------------------------------- 

    0 FC Ingolstadt 04    13 -2  4 
    1 Hamburg      9 -2  8 
    2 SV Darmstadt 98    9 -1  8 
    3 Mainz       9 -3  6 
    4 FC Augsburg     4 -5  7 
    5 Werder Bremen     6 -5  7 
    6 Borussia Moenchengladbach  6 -6  9 
    7 Hoffenheim     5 -4  8 
    8 VfB Stuttgart     4 -8  9 
    9 Schalke 04     16 11 14 
10 Hannover 96     2 -12  6 
11 Borrusia Dortmund   16 11 15 
12 Bayern Munich    18 16 18 
13 Bayer Leverkusen    14  3 11 
14 Eintracht Frankfurt   9  4 13 
15 Hertha BSC Berlin   14  1  5 
16 1. FC Cologne    13  0 10 
17 VfB Wolfsburg    14  4 10 

编辑1:更新后的信息问题

编辑2:目标的填充宽度规范是不需要的(这是最后一个)

编辑3:点,差异和目标值居中。注:我通过实验手动完成。如果值的长度超过2位数,则必须执行一些max_name_length类型的事情。

编辑4:看到你的示例输出如何看起来更新。

+0

谢谢,更好的作品。但是,您是否看到图像上的预期输出?每行都有编号,三列在顶部标题。我将如何做到这一点? – Newbie

+0

如何更改代码,使标题行从“1”开始而不是“0”? – Newbie

+0

只需将i = i + 1放入关键区域即可。回答我自己的问题:) – Newbie

2

你从上面的代码中得到了什么输出?你会在这里粘贴吗?

并且如果您在每行中获得重复列标题的输出,则必须在for循环上方打印表格标题,并将其从内部打印中删除,作为循环。

f = open("table1.txt",'r') 
print('Team \t Points \t Diff \t Goals') 
a=1; 
for aline in f: 
    values = aline.split(',') 
    print(a, values[0], values[1], int(values[2])-int(values[3]), values[2]) 
    a++; 
f.close() 

这可能帮助你..

+0

这应该是一个评论:) – The6thSense

+1

我没有50的评论信誉.. –

+0

如果你想要数字的行然后只是简单的..初始化一个值为1的变量,并在循环中打印并增加它。 –