Один из вариантов - заменить числовой формат в output
на %s
, а затем в заменяющем кортеже создать либо правильный числовой вывод, либо пустое пространство, в зависимости от того, что v
:
>>> v = 123.321
>>> "%s|%s|" % (n, "%5.4E" % v if v is not None else " "*10)
'Scientific:|1.2332E+02|'
>>> v = None
>>> "%s|%s|" % (n, "%5.4E" % v if v is not None else " "*10)
'Scientific:| |'
Вы можете сделать это немного более функциональным с помощью простого замыкания:
def make_default_blank_formatter(format, default):
def default_blank_formatter(v):
return format % v if v is not None else default
return default_blank_formatter
scientific_formatter = make_default_blank_formatter("%5.4E", " "*10)
>>> v = 123.321
>>> "%s|%s|" % (n, scientific_formatter(v))
'Scientific:|1.2332E+02|'
>>> v = None
>>> "%s|%s|" % (n, scientific_formatter(v))
'Scientific:| |'
edit: Вот как вы можете переделать свой код печати, чтобы использовать это:
perline = 3
n = ["1st:","2nd:","3rd:","4th:","5th:","6th:"]
v = [1.0, 2.0, 3.0, 4.0, None, None]
strfmt = "%5.4E"
output = ("%s|%s| ")*perline
for args in zip(*[iter(n),iter(map(scientific_formatter, v))]*perline):
print output % args