【问题标题】:Undesirable line break mysteriously appearing in a print() invocation不受欢迎的换行符神秘地出现在 print() 调用中
【发布时间】:2020-05-10 05:20:53
【问题描述】:

我正在打印一些变量,如下所示:

print("First name:", first_name)
print("Last name:", last_name)
print("Password:", password)

前两个显示得很好,但最后一个是这样的:

    Password:
    <the password>

这是不可取的并且与其他的不一致,这就是为什么我希望它看起来像这样:

Password:<the password>

使用end="" 没有帮助。

【问题讨论】:

  • password 本身是否以换行符开头?
  • 这是整个代码吗? password 有什么作用?
  • 这能回答你的问题吗? How to flush output of print function?
  • @Samwise no password 不要以换行符开头
  • @DavidS 不,这不是完整的代码,密码包含由这个 url 创建的生成密码:random.org/passwords/… 我用 bs4 抓取的

标签: python line-breaks


【解决方案1】:

尝试在打印函数中将密码转换为字符串

print("password:",str(password))

【讨论】:

    【解决方案2】:

    您的 password 变量包含换行符(或其字符串表示形式)。

    这些格式化方法中的任何一种都将打印一个没有换行符的内联字符串变量:

    >>> password = "blarf"
    >>> print("password:", password)
    password: blarf
    >>> print(f"password: {password}")
    password: blarf
    

    但是,如果变量包含换行符,您将在输出中得到换行符:

    >>> password = "\nblarf"
    >>> print("password:", password)
    password:
    blarf
    

    【讨论】:

    • 是的;没关系,因为您在 password 变量中有换行符。
    【解决方案3】:

    试试:

    print("password:",password.strip())
    

    您的密码变量内容之前可能有换行符。 strip 摆脱了这一点。请注意,它还会删除密码中字符串字符之前和之后的所有空格,包括空格之前和之后。如果您只想删除前后的换行符,请使用:

    print("password:",password.strip("\n"))
    

    【讨论】:

      【解决方案4】:

      尝试删除password 字符串中存在的任何换行符。

      您可以使用以下方法:

      first_name = "david"
      last_name = "s"
      password = "\n1234"
      print("firstname:",first_name)
      print("lastname:",last_name)
      print("password:",password)
      # firstname: david
      # lastname: s
      # password: 
      # 1234
      
      
      # removing the new line
      password = password.replace("\n","")
      print("firstname:",first_name)
      print("lastname:",last_name)
      print("password:",password)
      # firstname: david
      # lastname: s
      # password: 1234
      
      import re
      re.sub("\n", "", password)
      print("firstname:",first_name)
      print("lastname:",last_name)
      print("password:",password)
      # firstname: david
      # lastname: s
      # password: 1234
      

      第一个选项是使用字符串对象的replace 方法,您可以在以下链接中阅读: https://www.tutorialspoint.com/python/string_replace.htm

      第二个选项是使用re 模块的sub,您可以在以下链接中阅读: https://note.nkmk.me/en/python-str-replace-translate-re-sub/

      【讨论】:

      • 这些方法将删除password中出现的所有"\n",甚至是字符串中间的。
      • @Ehsan 同意,但是看着 OP cmets 的每一个可能的答案,我认为这就是他所需要的;他似乎没有注意到password中存在的\n
      • 我并不是要批评您的解决方案。把它放在那里供读者注意。
      • @Ehsan 我不这么认为。只是解释我的推理
      【解决方案5】:

      感谢我使用的 Samwise,设法解决了问题:

      password.splitlines()
      password = password[1]
      print("password:",password)
      

      David S 方法也很好用

      password = password.replace("\n","")
      print("password:",password)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 2021-02-20
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多