如何解决是否可以在不使用python的情况下在同一位置打印“ for循环”表的位置?
这是一个代码示例,可以在控制台的同一光标位置上打印一些数字,而无需将字符从原处移动。
代码示例
from sys import stdout
from time import sleep
for i in range(1,20):
stdout.write("\r%d" % i)
stdout.flush()
sleep(1)
stdout.write("\n") # move the cursor to the next line
问题
如果我们需要在同一位置上一遍又一遍地打印整个表格,而又不创建新的表格行,使其完全变成
static
,那么这种方法是否可行?
我的目的是使在底部提供的代码能够与上面共享的code example
相同。
在控制台上打印表格时,表格的标题不得更改,但传递的值(行元素)必须在相同的单元格位置动态更改,从而迭代传递的值。
下面是我想要的代码。
from prettytable import prettytable
from sys import stdout
from time import sleep
t = prettytable(['Name','Age'])
lis = [['Alice',25],['Alice',20],['Man',20]]
for x in lis:
t.add_row(x)
print(t,end='\r')
t.clear_rows()
sleep(1)
stdout.write("\n")
在这里,迭代print(t,end='\r')
每次都将表打印到新行上。
我希望看到为第一次迭代(for循环)打印的表,完全被下一次迭代的表替换,依此类推。
解决方法
curseXcel和curses
可以实现此目的。请检查curseXcel可用的所有不同方法。
先决条件
安装
sudo pip install curseXcel
代码
import curses
from curseXcel import Table
from time import sleep
def main(stdscr):
y = 0
table = Table(stdscr,2,4,10,45,20,spacing=2,col_names=True) # This sets the table rows,columns,width,height and spacing.
for x in [['Name',0],['Age',1],['Job',2],['Country',3]]:
# This sets the header columns.
table.set_column_header(x[0],x[1])
table.delete_row(1) # This deletes the additional row.
nameList = [["Alice",25,'Painter','AUS'],["Bob",32,'cop','UK'],["Thinker",'coder',["Adam",70,'None','USA'],["Jessi",14,'BZA'],["Leo",30,'Army','India']]
# This above list contains data you need to loop through
while (y != 'q'): # This makes the loop to repeat indefinitely.
#y= stdscr.getkey()
for x in nameList:
sleep(1)
# This sets the elements of the list to the respective positions.
table.set_cell(0,x[0])
table.set_cell(0,1,x[1])
table.set_cell(0,x[2])
table.set_cell(0,3,x[3])
table.refresh()
stdscr = curses.initscr()
curses.noecho()
curses.cbreak()
stdscr.keypad(True)
curses.wrapper(main)
curses.nocbreak()
stdscr.keypad(False)
curses.echo()
curses.endwin() # End curses
输出
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。