有没有一种工具可以将字符串格式类型自动转换为f字符串?

时间:2019-07-03 19:49:19

标签: python string formatting f-string

从python 3.6开始,将值格式化为字符串的最短,最高效的方法是PEP 498 f-strings(例如f'Hello {name}')。

在现有代码库中将较旧的格式设置类型('Hello %s' % name'Hello {}'.format(name))转换为新的格式设置似乎是可以自动化的任务,但是我找不到任何执行此操作的工具。是否有工具可以将使用旧字符串格式的文字自动转换为f字符串?

2 个答案:

答案 0 :(得分:1)

您可以使用flynt将多个python文件转换为使用f字符串。它具有仅更改单行表达式的局限性。

要运行它,您需要一个python 3.7+解释器。然后,它很简单:

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

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

以下是描述f弦的优缺点的文章:

  

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

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

答案 1 :(得分:0)

看来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字符串。