【问题标题】:How to print characters behind previous string如何在前一个字符串后面打印字符
【发布时间】:2018-12-15 23:22:32
【问题描述】:

所以简单地说,我想知道如何做到这一点:

import sys
sys.stdout.write("Hello World")

=> Hello World

#print something to go left maybe?
sys.stdout.write("Im Back Here!")

=> Im Back Here!Hello World

我希望我已经解释得足够清楚了!任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 您的意见如何? IMO,这将对人们处理事情的方式产生重大影响。

标签: python string output


【解决方案1】:

您可以使用以下方法更改光标位置:

sys.stdout.seek(offset[, whence])

你可以在这里找到它的描述: Python 3 library

但是使用 write 方法会覆盖 stdout,因此您需要以某种方式记住输出。
解决方案示例:

import sys

out = ""

def append(s):
    global out
    sys.stdout.seek(0, 2)
    sys.stdout.write(s)
    out += s

def append_left(s):
    global out
    sys.stdout.seek(0,0)
    sys.stdout.write(s + out)
    out = s + out

append("Hello World")
append_left("Im Back Here!")

但是当您不将输出重定向到文件时,stdout 是不可搜索的。你可以找到原因 there.

【讨论】:

  • 这是一个不错且优雅的解决方案。更适合采用更工程化的方法,而我上面的方法直截了当。
  • 谢谢!这个解决方案帮助很大,对我很有用!真的很感激
【解决方案2】:

试试这个:

l = []
l.append("Hello World")
l.append("Im Back Here!")
l.reverse()


print(''.join(l))

或者这个:

import sys
def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]
s1 = "Hello World"
s2 = "Im Back Here!"

sys.stdout.write(insert_str(s2,s1,len(s2)))

两者都给出相同的结果,代码在这里:https://onlinegdb.com/BJGCJQml4

【讨论】:

    【解决方案3】:

    这应该是在交互式环境中吗?如果是,您将不得不处理您使用的任何库提供的控制输出。对于常规标准库,可以使用回车符\r进行覆盖。玩弄:

    import sys
    
    msg1 = "Hello World"
    msg2 = "Im Back Here!"
    sys.stdout.write(msg1)
    sys.stdout.write("\r{}{}".format('\r', msg2, msg1))
    sys.stdout.write('\n')
    

    sys.stdout.write(msg1) 行产生输出Hello World,而sys.stdout.write("\r{}{}".format(msg2, msg1)) 行将光标移回行首,打印Im Back Here!,后跟Im Back Here!。我添加了一个换行符只是为了避免弄乱 shell 窗口。

    如果您想要与您指定的完全相同的输出,Hello World 出现两次(第一次后跟换行符),您可以从 sys.stdout.write("{}\n".format(msg1)) 开始,这将产生输出):

    Hello World
    Im Back Here!Hello World
    

    【讨论】:

    • 感谢您的帮助,但这会覆盖上一个/第一个文本,我不希望发生这种情况 :( 谢谢!
    • @petrexxy:为什么不覆盖?您当前的打印内容也会覆盖屏幕上的任何内容。
    • @petrexxy 但是覆盖是您指定的:这是写入标准输出的工作方式,它会产生您指定的输出。如果您希望第一个输出仍然存在,则需要打印两次。我澄清了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2022-12-24
    • 2021-02-24
    • 2021-12-09
    • 2017-06-25
    • 2022-11-16
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多