【发布时间】:2016-06-22 17:21:19
【问题描述】:
问:是否可以使用 Python 3.5 的字符串格式化语法创建格式字符串以左截断?
基本上我想做的就是拿一个 git SHA:
"c1e33f6717b9d0125b53688d315aff9cf8dd9977"
并且仅使用格式字符串,仅显示正确的 8 个字符:
"f8dd9977"
我尝试过的事情:
无效语法
>>> "{foo[-8:]}".format(foo="c1e33f6717b9d0125b53688d315aff9cf8dd9977")
>>> "{foo[-8]}".format(foo="c1e33f6717b9d0125b53688d315aff9cf8dd9977")
>>> "{:8.-8}".format("c1e33f6717b9d0125b53688d315aff9cf8dd9977")
错误的结果
### Results in first 8 not last 8.
>>> "{:8.8}".format("c1e33f6717b9d0125b53688d315aff9cf8dd9977")
有效但不灵活且麻烦
### solution requires that bar is always length of 40.
>>> bar="c1e33f6717b9d0125b53688d315aff9cf8dd9977"
>>> "{foo[32]}{foo[33]}{foo[34]}{foo[35]}{foo[36]}{foo[37]}{foo[38]}{foo[39]}".format(foo=bar)
类似的问题是asked, but never answered。但是我的不同之处在于我仅限于使用格式字符串,我无法更改输入参数的范围。这意味着以下是不可接受的解决方案:
>>> bar="c1e33f6717b9d0125b53688d315aff9cf8dd9977"
>>> "{0}".format(bar[-8:])
我应该澄清的另一个方面...上面解释了问题的最简单形式。在实际情况下,问题更准确地表述为:
>>> import os
>>> "foo {git_sha}".format(**os.environ)
我想在哪里左截断“git_sha”环境变量。诚然,这比最简单的形式要复杂一些,但如果我能解决最简单的问题 - 我可以找到解决更复杂问题的方法。
【问题讨论】:
-
如果输入是一个字符串,是什么阻止了您在格式之前切掉最后一个
8字符? -
在 python 3.6 中它将像
f'{s[-8:]}'一样简单 -
@arewm 基本上我有一个配置文件,它是一个模板,我可以将环境变量替换为标题。改变环境只是一堆工作......如果我能通过格式化解决它会更容易。
-
@PadraicCunningham 那是合理的......但仅限于 Python 3.5 :-(
-
@JacquesGaudin 你错过了重点......仅格式化字符串......
标签: python string python-3.x string-formatting