是否可以在不使用 python 移动终端行的情况下在同一位置打印“for循环”表?
Posted
技术标签:
【中文标题】是否可以在不使用 python 移动终端行的情况下在同一位置打印“for循环”表?【英文标题】:Is it possible to print a table of a 'for loop' at the same position without moving ahead the lines of the Terminal using python? 【发布时间】:2021-01-22 01:50:33 【问题描述】:这是一个代码示例,用于在控制台的相同光标位置打印一些数字,而不需要移动字符。
代码示例
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 循环)打印的表格,完全被下一次迭代的表格替换,依此类推。
【问题讨论】:
这里没有curses
;您只是将光标返回到带有\r
的行的开头。如果你想回到上一行的位置,你需要curses
(或其他形式的光标寻址)。
@triplee 正如您所说,我使用curses
找到了一个很好的解决方案,但问题现在已经结束。当问题重新打开时,我会尽快发布答案。
我不确定这是否仍然足够清楚可以重新打开,即使那样我想它最终可能会作为现有问题的副本再次被关闭。没有做你想做的事情的代码是传达你想做的事情的糟糕方式。
好的。我接受。只是更好地编辑了这个问题。我之前创建的重复问题已经关闭。
【参考方案1】:
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", 20, 'coder', 'UK'],["Adam", 70, 'None', 'USA'],["Jessi", 14, 'None', '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,0, x[0])
table.set_cell(0,1, x[1])
table.set_cell(0,2, 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
输出
【讨论】:
以上是关于是否可以在不使用 python 移动终端行的情况下在同一位置打印“for循环”表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不从终端或任何编辑器执行的情况下运行 python 程序 [重复]
是否可以从一个字符串本地保存数据,然后在不将其移动到其他地方的情况下进行破坏?
是否可以在不使用 GUI 的情况下使用 ParaView Python Shell 加载 OpenFOAM 解决方案文件?