自动将旧的字符串格式样式转换为f字符串

Ari*_*ide 8 converter string-formatting python-3.x

我如何转换Python的旧式格式字符串,如下所示:

print("You: %s points. Me: %s points." % (score, total - score))
Run Code Online (Sandbox Code Playgroud)

进入以下?

print(f"You: {score} points. Me: {total - score} points.")
Run Code Online (Sandbox Code Playgroud)

实际上,对于两个例子%s,我已经写了这个正则表达式:

  • 搜索: "(.*)%s(.*)%s(.*)" % \(([^,\)]+), ([^,\)]+)\)
  • 更换: f"$1{$4}$2{$5}$3"

一个人可以很容易地编写其他几个正则表达式来处理1,3,4,... %s的情况,但是我正在寻找一种更通用,更容易出错的方法。

注意:AFAIK,2013年在这里提出了类似的问题(从旧样式自动转换高级字符串格式器),当时f字符串不是问题(它们是在Python 3.6引入的)。

Bor*_*ris 7

使用flynt. 您使用目录名称调用它,它会递归搜索所有 .py 文件并将%格式转换为 f 字符串。

flynt <directory_to_process>
Run Code Online (Sandbox Code Playgroud)

它将转换.format()呼叫以及%格式。

你可以安装它

pip install flynt
Run Code Online (Sandbox Code Playgroud)

请注意,转换%为 f-strings 并不完美,如果您将单个元素元组传递给它们,则会产生不同的结果(这就是 Python 摆脱%格式的原因)。