python-3.x 合并f字符串和原始字符串文字

0g0grzrc  于 2023-06-25  发布在  Python
关注(0)|答案(6)|浏览(162)

我想知道如何使用f字符串,同时使用r来获取原始字符串文字。我目前有它如下,但希望允许任何名称来取代Alex的选择,我想添加一个f字符串,然后用花括号取代Alex,并把用户名放在里面,但这不适用于r

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

r1zk6ea11#

你可以把f-string的f和raw string的r组合起来:

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

r仅禁用反斜杠转义序列处理,而不是f字符串处理。
引用文档:
'f'可以与'r'组合,但不能与'b'或'u'组合,因此原始格式化字符串是可能的,但格式化字节文字是不可能的。
...
除非存在'r'或'R'前缀,否则字符串和字节中的转义序列将被解释为…

svmlkihl

svmlkihl2#

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

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

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

vi4fp9gy

vi4fp9gy3#

由于您使用的是文件路径,因此我将避免使用f字符串,而是使用适合路径操作的库。例如,pathlib将允许您执行以下操作:

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

这种方法还提供了一些其他常见的文件操作,例如is_dir``open
或者,您也可以使用os.path.join

3okqufwl

3okqufwl4#

正如其他人提到的,rf确实可以混合使用。但是要小心,因为默认情况下插值的字符串不是原始的:

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
ru9i0ody

ru9i0ody5#

我发现的最简单的方法是使用隐式的行延续将我的字符串分割成组件,即:在括号内分离出'r'和'f'字符串。下面是matplotlib标题的例子,包含'normal'、'formatted'和'raw'字符串文字(在这里阅读更多):

plt.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

诚然,对于这个简单的场景,这似乎有点大材小用,但当字符串变得更复杂时,这将是您的朋友!

q7solyqu

q7solyqu6#

您可以尝试:

username = input('Enter name')
download_folder = r'C:\Users\Alex\Downloads'
download_folder = download_folder.replace("Alex", username)
print(download_folder)

相关问题