将 Python f 字符串与 printf 样式格式相结合?

问题描述 投票:0回答:2

我需要格式化命令行,其中一些参数来自简单变量,其他参数是较长表达式的结果。 Python f 字符串非常适合变量,我使用 printf 样式

%s
并在字符串外部提供长表达式,因为如果内联放置,它只会使命令模板变得过于混乱:

run(f"""zstd -dc {diff_file} | 
      git apply -p2 {exclude_args} --directory='%s'""" % (os.getcwd() + "/output"))

我没有将目录参数存储在命名变量中,因为它只使用一次,而不是

diff_file
exclude_args

是否有更干净的方法来避免将

os.getcwd() + "/output"
直接放入 f 字符串中,并避免混合旧的 printf
%s
语法和新的 f 字符串?

除了让阅读代码的人有点困惑之外,像上面那样做还有什么缺点吗?

python formatting f-string
2个回答
0
投票

来自文档

格式化字符串文字(也简称为 f 字符串)允许您通过在字符串中添加 f 或 F 前缀并将表达式编写为 {表达式},将 Python 表达式的值包含在字符串中。

所以

run(f"""zstd -dc {diff_file} | 
      git apply -p2 {exclude_args} --directory='{os.getcwd()}/output'""")


0
投票

根本不要使用字符串格式。

from pathlib import Path
from subprocess import Popen, PIPE, run

p = Popen(["zstd", "-dc", diff_file], stdout=PIPE)

run(["git", "apply", "-p2", *exclude_args, "--directory", Path.cwd() / "output"], stdin=p.stdout)
© www.soinside.com 2019 - 2024. All rights reserved.