Python格式无法正确显示

时间:2013-12-05 11:02:56

标签: python database sqlite formatting

目前我正在尝试将SQLite数据库文件中的一些数据输出到命令行,但数据似乎没有正确显示。

目前,当我输入要显示的数据时,它输出如下:

   Student Table
StudentID    Name    Year                
    1        Dan      13
    2       Jake      13
    3        Joe      13
    4      David      13

我希望所有名字都正确排列或至少居中,但我无法弄清楚如何做到这一点!

格式代码如下:

def view():
  con = lite.connect('records.db')
  with con:
      cur = con.cursor()    
      cur.execute('SELECT * FROM Student')
      col_names = [cn[0] for cn in cur.description]
      rows = cur.fetchall()
      print("%20s" % ("Student Table"))
      print("{0:1} {1:^10} {2:20}".format(col_names[0], col_names[1], col_names[2]))
      for row in rows:    
          print("%5s %10s %7s" % (row))
  display = menu.Menu.DisplayMenu("Student")
  choice = GetMenuChoice()
  ValidateMenuChoice(choice)
  main(choice)

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

在整个代码中标准化新式格式(str.format而不是%)可能是一个好主意,而不是混合和匹配。这将改变,特别是这一行:

print("%5s %10s %7s" % (row))

到此:

print("{:5} {:10} {:7}".format(*row))

然后,您可以调整该格式字符串以进行对齐。这样:

print("{:>5} {:>10} {:>7}".format(*row))

将右对齐所有三列。 '>'表示“右对齐此字段” - 如果您希望将其保留为默认对齐,则可以将其从其他两列中删除。

你已经为列标题做了类似的事情,除了你把中间的那个放在中间而不是右对齐它。您可以在此处重复使用该字符串:

print("{:5} {:^10} {:7}".format(*row))

(请注意 :之前的数字是可选的)。为了减少代码重复次数,您可以将该字符串存储在变量中并执行以下操作:

columns = "{:5} {:10} {:7}"
# get col_names
print("{:20}".format("Student Table")
print(columns.format(*col_names))
for row in rows:
   print(columns.format(*row))