use*_*887 18 python string string-formatting
我希望通过以下方式实现以下目标str.format:
x,y = 1234,5678
print str(x)[2:] + str(y)[:2]
Run Code Online (Sandbox Code Playgroud)
我能做到的唯一方法是:
print '{0}{1}'.format(str(x)[2:],str(y)[:2])
Run Code Online (Sandbox Code Playgroud)
现在,这个例子和我真正拥有的是一个冗长而凌乱的字符串,所以我想把切片放在里面{}.我研究了文档,但我无法弄清楚正确的语法.我的问题是:是否可以在替换字段内切换字符串?
你可以这样做.
注意
这是一个粗略的例子,不应被视为完整和测试.但我认为它会向您展示一种开始到达目的地的方法.
import string
class SliceFormatter(string.Formatter):
def get_value(self, key, args, kwds):
if '|' in key:
try:
key, indexes = key.split('|')
indexes = map(int, indexes.split(','))
if key.isdigit():
return args[int(key)][slice(*indexes)]
return kwds[key][slice(*indexes)]
except KeyError:
return kwds.get(key, 'Missing')
return super(SliceFormatter, self).get_value(key, args, kwds)
phrase = "Hello {name|0,5}, nice to meet you. I am {name|6,9}. That is {0|0,4}."
fmt = SliceFormatter()
print fmt.format(phrase, "JeffJeffJeff", name="Larry Bob")
Run Code Online (Sandbox Code Playgroud)
OUTPUT
Hello Larry, nice to meet you. I am Bob. That is Jeff.
Run Code Online (Sandbox Code Playgroud)
注2:
没有为切片一样,没有支持[:5]或[6:],但我认为这将是很容易的实现也是如此.切片索引也没有错误检查超出范围等.