我想知道如何在使用r
获取原始字符串文字的同时使用f-string。 我目前的代码如下,但希望允许任何名称替换Alex
。 我正在考虑添加一个f-string,然后用花括号替换Alex
并将用户名放入其中,但这与r
不兼容。
username = input('Enter name')
download_folder = r'C:\Users\Alex\Downloads'
我想知道如何在使用r
获取原始字符串文字的同时使用f-string。 我目前的代码如下,但希望允许任何名称替换Alex
。 我正在考虑添加一个f-string,然后用花括号替换Alex
并将用户名放入其中,但这与r
不兼容。
username = input('Enter name')
download_folder = r'C:\Users\Alex\Downloads'
f
与原始字符串的r
结合起来使用:user = 'Alex'
dirToSee = fr'C:\Users\{user}\Downloads'
print (dirToSee) # prints C:\Users\Alex\Downloads
r
只禁用反斜杠转义序列处理,而不禁用 f-string 处理。
引用文档:
‘f’ 可以与 ‘r’ 结合使用,但不能与 ‘b’ 或 ‘u’ 结合使用,因此可以使用原始格式化字符串,但不能使用格式化字节文字。
...
除非存在 ‘r’ 或 ‘R’ 前缀,否则会解释字符串和字节文字中的转义序列...
fr
时,PyCharm IDE 显示错误,但当运行代码时,它可以正常工作,没有任何问题。 - VBJrf
或 fr
作为前缀并不会引起特殊的兼容性问题。 - Karl Knechtel另外,您还可以使用str.format()
方法。
name = input("What is your name? ")
print(r"C:\Users\{name}\Downloads".format(name=name))
这将通过插入name
标签的值来格式化原始字符串。
正如其他人提到的那样,混合使用 r
和 f
是可以做到的。
不过要小心,因为插值字符串默认情况下不是原始的:
not_escaped = "\not_escaped"
half_escaped = rf"escaped_{not_escaped}"
print(half_escaped)
### outputs:
# escaped_
# ot_escaped
对于插值字符串,您也需要使用 r
:
escaped = r"\n_escaped"
full_escaped = rf"escaped_too_{escaped}"
print(full_escaped)
# escaped_too_\n_escaped
由于您正在处理文件路径,我建议避免使用f-strings,而是使用专门用于路径操作的库。例如,pathlib
可以让您执行以下操作:
from pathlib import Path
username = input('Enter name')
download_folder = Path('C:/Users', username, 'Downloads')
is_dir
和open
。或者,您也可以使用os.path.join
。Path('C:/Users') / username / 'Downloads'
。 - Nameless Oneplt.title('Blind Surveys 01-FEB-2022\n'
f'Recording{n}; Mean dose rate: {m.get_mean_doserate()*1000:.4f}'
r' $\mathrm{\mu}$Sv/hr', fontsize='x-large')
为了更好地回答问题,您还可以在变量声明中使用隐式行连续符:
user = ‘Alex’
dir_out = (r‘C:\Users\’
f‘{user}’
r‘\Downloads’)
print(dir_out) #C:\Users\Alex\Downloads
可以承认,对于这种简单的情况来说可能有点过度,但当字符串变得更加复杂时,它将成为你的好帮手!
username = input('Enter name')
download_folder = r'C:\Users\Alex\Downloads'
download_folder = download_folder.replace("Alex", username)
print(download_folder)
print("{0}".format(variable))
。 - Alex_P