Python 如何编辑已打印的内容?

Python 如何编辑已打印的内容?,python,python-3.x,Python,Python 3.x,例如,假设其中一个印刷品是“Hello World”,第二个是“Hello”。我如何在写“Hello World”的同一行上打印“Hello”?这只是一个例子。事实上,我不知道印刷文本会有多长 下面是一个示例脚本: x=open(“file.txt”,“r+”).read().split(“\n”) 对于x中的i: 打印(某物) 我不知道。我希望输出是文本文件的第一行显示的内容,然后是第二行显示的内容,依此类推,除了打印第二行/第三行/第四行。。。第一行上的行,每行的长度未知,有些比另一些短。

例如,假设其中一个印刷品是“Hello World”,第二个是“Hello”。我如何在写“Hello World”的同一行上打印“Hello”?这只是一个例子。事实上,我不知道印刷文本会有多长

下面是一个示例脚本:

x=open(“file.txt”,“r+”).read().split(“\n”)
对于x中的i:
打印(某物)
我不知道。我希望输出是文本文件的第一行显示的内容,然后是第二行显示的内容,依此类推,除了打印第二行/第三行/第四行。。。第一行上的行,每行的长度未知,有些比另一些短。假设file.txt显示:

Overflow
Stack
我希望它先打印“溢出”,然后打印“堆栈”,除了每个单词都打印在第一行,一旦打印“堆栈”,就看不到“溢出”的每个部分

请记住,
打印(“Hello World”,end=“\r”)
由于长度原因无法正常工作。

试试这个

print("Hello World","Hello",end=" ")

end=”“允许您在执行print()后保持在同一行上,因此,每当您再次调用print()函数时,值将从同一行开始打印。您可以根据前一行在每一行中填充空格,从而绕过
\r
解决方案:

prev_size=0
打开(“file.txt”、“r+”)作为f:
对于f中的行:
打印(f“{line.strip()}{'*prev_size}”,end='\r')
上一个尺寸=长度(行)

您可能希望在打印之间添加一个
sleep
,以便能够实际看到文本的变化…

在python中使用打印函数时,您只是将字符推到某个管道上(管道可能连接到标准输出,但您的程序不知道)。一旦它被推了,你就没办法取消推了。毕竟,管道甚至可能没有连接到屏幕上。它可能直接连接到另一个程序的输入,也可能使用物理打印机进行显示。在这些情况下,不推动意味着什么

但是,有一些特殊的控制字符(例如“backspace”字符),您可以将其推送到管道上,以表示要删除字符。但是,您连接到的终端可以自由地使用这些字符执行它想要的操作。它可以尊重您的意愿并删除字符,也可以打印文字'\b'字符以表示退格,或者完全忽略您并在前面的字母之后继续打印。那完全是你无法控制的

假设打印字符的终端支持覆盖字符,则可以使用ANSI控制序列。将光标移动到行首的顺序是
'\033[1G'
,从当前光标位置到行尾的所有内容的删除顺序是
'\033[0K'

导入时间
打印('hello world',end='',flush=True)#打印“hello world”,末尾没有换行符
时间。睡眠(2)#等待2秒钟
打印('\033[1G\033[0K',end='')#将光标移动到行首并擦除该行
print('hi')#在末尾用换行符打印“hi”
flush=True
是必需的,因为打印函数在默认情况下是缓冲的,在遇到换行符之前不会实际打印任何内容。这告诉函数您要立即刷新缓冲区


查看“CSI序列”部分,查看还有哪些其他代码可用。

添加空格以覆盖前一行:
print(“Hello World”,end=“\r”)
print(“Hello”,end=“\r”)
“Length”不是
print(“Hello World”,end=“\r”)的唯一问题
@Feodoran我听说过,但我不知道新字符串的实际长度,这意味着我不知道要放多少空格。它可以是一个字符或一吨字符。你可以在打印时存储以前的字符串或更好的长度,并相应地覆盖。你的问题不是完全正确的y清除。输出为
Hello World Hello
@Retluoc3002您能更简要地解释一下您的查询吗?他不想继续从同一行打印,而是“擦除”上一行并在上面打印。。。