Python - 如何在迭代时让文本出现在同一行?

时间:2014-08-11 02:01:17

标签: python terminal screen iteration

当我在Python中迭代某些行时,我希望它们出现在同一行并覆盖显示的最后一行,而不是显示在单独的行上。例如:

files = [ "pic1.jpg","pic2.jpg","pic3.jpg"]

for line in files:
  print "Current file is:", line

目前的结果是:

Current file is: pic1.jpg
Current file is: pic2.jpg
Current file is: pic3.jpg

期望的结果是:

Current file is: pic3.jpg

..在“当前文件为:”之后显示其他2个文件。换句话说,结果全部适合一行,而不是多行,当前迭代覆盖前一项。

如何在Python for Windows(或Linux)上使用它?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用\r字符返回当前行的开头,但使用sys.stdout.write代替print函数(或语句),因为这会自动添加字符串末尾的\r\n个字符。

这是一个示例函数,用于查看其工作原理:

from sys import stdout
from time import sleep

def print_same_line():
    for i in range(10):
        stdout.write("\rCounter: {0}.".format(i))
        sleep(1)
    stdout.write("\n")

print_same_line()

根据您的示例:

for line in files:
    stdout.write("\rCurrent file is: " + line)
stdout.write("\n")

这是擦除之前印刷线的一个小技巧:

files = ["some_long_text_file.txt", "another_file.png", "short.jpg"]

previous = ""
for line in files:
    stdout.write("\r" + " " * len(previous) + "\r" + line)
    previous = line

希望这有帮助!

答案 1 :(得分:2)

我通常会这样做:

print "\r%d" % (x),

最后的逗号告诉print保持在同一行,\ r \ n是重新回车(没有换行)。 x将是一个变量,代码如下:

for x in xrange(100):
    print "\r%5d" % (x),

编辑: @ abarnert的评论