我想知道如何使用f字符串,同时使用r来获取原始字符串文字。我目前有它如下,但希望允许任何名称来取代Alex的选择,我想添加一个f字符串,然后用花括号取代Alex,并把用户名放在里面,但这不适用于r。
r
Alex
username = input('Enter name') download_folder = r'C:\Users\Alex\Downloads'
r1zk6ea11#
你可以把f-string的f和raw string的r组合起来:
f
user = 'Alex' dirToSee = fr'C:\Users\{user}\Downloads' print (dirToSee) # prints C:\Users\Alex\Downloads
r仅禁用反斜杠转义序列处理,而不是f字符串处理。引用文档:'f'可以与'r'组合,但不能与'b'或'u'组合,因此原始格式化字符串是可能的,但格式化字节文字是不可能的。...除非存在'r'或'R'前缀,否则字符串和字节中的转义序列将被解释为…
svmlkihl2#
或者,您可以使用str.format()方法。
str.format()
name = input("What is your name? ") print(r"C:\Users\{name}\Downloads".format(name=name))
这将通过插入name值来格式化原始字符串。
name
vi4fp9gy3#
由于您使用的是文件路径,因此我将避免使用f字符串,而是使用适合路径操作的库。例如,pathlib将允许您执行以下操作:
pathlib
from pathlib import Path username = input('Enter name') download_folder = Path('C:/Users', username, 'Downloads')
这种方法还提供了一些其他常见的文件操作,例如is_dir``open。或者,您也可以使用os.path.join)
is_dir``open
os.path.join
3okqufwl4#
正如其他人提到的,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
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
诚然,对于这个简单的场景,这似乎有点大材小用,但当字符串变得更复杂时,这将是您的朋友!
q7solyqu6#
您可以尝试:
username = input('Enter name') download_folder = r'C:\Users\Alex\Downloads' download_folder = download_folder.replace("Alex", username) print(download_folder)
6条答案
按热度按时间r1zk6ea11#
你可以把f-string的
f
和raw string的r
组合起来:r
仅禁用反斜杠转义序列处理,而不是f字符串处理。引用文档:
'f'可以与'r'组合,但不能与'b'或'u'组合,因此原始格式化字符串是可能的,但格式化字节文字是不可能的。
...
除非存在'r'或'R'前缀,否则字符串和字节中的转义序列将被解释为…
svmlkihl2#
或者,您可以使用
str.format()
方法。这将通过插入
name
值来格式化原始字符串。vi4fp9gy3#
由于您使用的是文件路径,因此我将避免使用f字符串,而是使用适合路径操作的库。例如,
pathlib
将允许您执行以下操作:这种方法还提供了一些其他常见的文件操作,例如
is_dir``open
。或者,您也可以使用
os.path.join
)3okqufwl4#
正如其他人提到的,
r
和f
确实可以混合使用。但是要小心,因为默认情况下插值的字符串不是原始的:你也必须使用
r
来插值字符串:ru9i0ody5#
我发现的最简单的方法是使用隐式的行延续将我的字符串分割成组件,即:在括号内分离出'r'和'f'字符串。下面是matplotlib标题的例子,包含'normal'、'formatted'和'raw'字符串文字(在这里阅读更多):
只是为了使它更适用于这个问题,你也可以在变量声明中使用隐式行继续:
诚然,对于这个简单的场景,这似乎有点大材小用,但当字符串变得更复杂时,这将是您的朋友!
q7solyqu6#
您可以尝试: