有没有一个工具可以自动将字符串格式类型转换为f字符串? [已关闭]

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

自 python 3.6 起,将值格式化为字符串的最短、最高效的方法是 PEP 498 f-strings(例如

f'Hello {name}'
)。

将旧格式类型(

'Hello %s' % name
'Hello {}'.format(name)
)转换为现有代码库中的新格式似乎是一项可以自动化的任务,但是我找不到任何简单的方法来执行此操作。有没有一种简单的方法可以自动将使用旧字符串格式的文字转换为 Python 代码中的 f 字符串?也许使用 IDE 或正则表达式?

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

您可以使用 flynt 将多个 python 文件转换为使用 f 字符串。

要运行它,您需要一个 python 3.6+ 解释器。那么,就这么简单:

pip install flynt
flynt [relative or absolute path to the root of your project]

请记住,它会更改文件,因此建议将这些文件提交到您喜欢的 git 或 SVC 系统。

这里有一篇文章描述了 f 弦的优缺点:

https://medium.com/@ikamen/f-strings-make-your-python-code-faster-and-more-read-today-579ef9ca0313

免责声明:我是flynt包的作者。


8
投票

看起来 pyupgrade 能够将

%
格式转换为
format
调用,以及
format
调用 f 字符串

printf 风格的字符串格式

可用性:

除非

--keep-percent-format
通过。

'%s %s' % (a, b)                  # '{} {}'.format(a, b)
'%r %2f' % (a, b)                 # '{!r} {:2f}'.format(a, b)
'%(a)s %(b)s' % {'a': 1, 'b': 2}  # '{a} {b}'.format(a=1, b=2)

f 弦

可用性:

--py36-plus
在命令行上传递。

'{foo} {bar}'.format(foo=foo, bar=bar)  # f'{foo} {bar}'
'{} {}'.format(foo, bar)                # f'{foo} {bar}'
'{} {}'.format(foo.bar, baz.womp}       # f'{foo.bar} {baz.womp}'

注意:pyupgrade 故意胆怯,如果它会使表达式更长或者替换参数不是简单名称或点名称(因为这会降低可读性),则不会创建 f 字符串。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.