【问题标题】:Combine f-string and raw string literal结合 f 字符串和原始字符串文字
【发布时间】:2020-02-06 16:41:56
【问题描述】:

我想知道如何在使用 r 获取原始字符串文字的同时使用 f 字符串。我目前有它如下,但希望允许任何名称替换Alex 的选项我正在考虑添加一个f-string,然后用花括号替换Alex 并将用户名放入其中,但这不适用于@ 987654324@.

username = input('Enter name')
download_folder = r'C:\Users\Alex\Downloads'

【问题讨论】:

  • 你可以使用print("{0}".format(variable))
  • 非常感谢!
  • "...但这不适用于 r"。为什么?你得到哪个错误?您正在尝试的代码是什么?

标签: python python-3.x f-string


【解决方案1】:

由于您使用的是文件路径,我会避免使用 f 字符串,而是使用适合路径操作的库。例如pathlib 将允许您这样做:

from pathlib import Path
username = input('Enter name')
download_folder = Path('C:/Users', username, 'Downloads')

这种方式还提供了一些其他常见的文件操作,比如is_diropen

或者你也可以使用os.path.join)

【讨论】:

    【解决方案2】:

    您可以将 f 用于 f 字符串与 r 用于原始字符串:

    user = 'Alex'
    dirToSee = fr'C:\Users\{user}\Downloads'
    print (dirToSee) # prints C:\Users\Alex\Downloads
    

    r 只禁用反斜杠转义序列处理,不禁用 f 字符串处理。

    引用docs

    “f”可以与“r”组合,但不能与“b”或“u”组合,因此可以使用原始格式化字符串,但不能使用格式化字节文字。

    ...

    除非存在 'r' 或 'R' 前缀,否则字符串和字节文字中的转义序列将被解释...

    【讨论】:

    • 啊,太好了,谢谢。我试过做 rf 但没有用。
    • @lammyalex rf 也应该可以工作。见String and Bytes literals
    • 在使用fr PyCharm IDE 时显示错误,但当您运行代码时,它可以正常工作。
    • 对我来说,这是一个警告,而不是错误:它与早期版本的 Python 不向后兼容。它可以在 Python 3.6 及更高版本上正常运行。
    • f-strings 在 3.5 及以下版本中已经不支持,因此使用rffr 作为前缀不会导致特殊的兼容性问题。
    【解决方案3】:

    原始 f 字符串在处理动态正则表达式时非常有用。 https://www.python.org/dev/peps/pep-0498/#raw-f-strings 包含很多有用的信息。

    【讨论】:

      【解决方案4】:

      或者,您可以使用str.format() 方法。

      name = input("What is your name? ")
      print(r"C:\Users\{name}\Downloads".format(name=name))
      

      这将通过插入 name 值来格式化原始字符串。

      【讨论】:

      • 我认为这是一个很好的替代解决方案!感谢您添加此内容。
      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2018-11-13
      • 2020-07-12
      • 1970-01-01
      相关资源
      最近更新 更多