a = raw_input()
a = a.split(',')
def printFormat(file):
for i in range(len(a)-1):
if a[i] != '':
a[i] = float(a[i])
print '%05.1f %05.2f %5d %5d %5d %05.1f %05.1f %5d %5d %05.2f %05.2f %16s'%(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11])
printFormat(a)
这是我的代码。我想以一种好的格式打印一些值,但这里有问题。如果所有的值都是浮点数,那么代码工作正常。当其中一个是空格或其他东西时,会有是一个错误。我想将所有无浮点值替换为' - '并且仍然保持良好的格式。 以下是示例输入:
1.3,,15,18,5,4.1,1.4,98,1,6.53,2.39,9/9/2016 10:00
输出应为:
001.3 - 15 18 5 004.1 001.4 98 1 06.53 02.39 9/9/2016 10:00
不知道如何用' - '替换无浮点值。在空间的中间。
答案 0 :(得分:2)
a
"-"+" "*(len(f % 0.0)-1)
发出破折号+计算格式化长度减去1并用空格填充)这是我的解决方案:
a="1.3,,15,18,5,4.1,1.4,98,1,6.53,2.39,9/9/2016 10:00"
a = a.split(',')
the_format = '%05.1f %05.2f %5d %5d %5d %05.1f %05.1f %5d %5d %05.2f %05.2f %16s'.split()
print(" ".join([f % float(v) if v else "-"+" "*(len(f % 0.0)-1) for v,f in zip(a[:-1],the_format)]+[the_format[-1] % a[-1]]))
结果:
001.3 - 15 18 5 004.1 001.4 98 1 06.53 02.39 9/9/2016 10:00
答案 1 :(得分:0)
您可以使用列表中的格式,如果不为空,则将其添加到字符串中:
def printFormat(line):
for i in range(len(line)-1):
if line[i] != '':
line[i] = float(line[i])
pattern = [
'%05.1f', '%05.2f', '%5d',
'%5d', '%5d', '%05.1f',
'%05.1f', '%5d', '%5d',
'%05.2f', '%05.2f', '%16s'
]
line = '1.3,,15,18,5,4.1,1.4,98,1,6.53,2.39,9/9/2016 10:00'
line = line.split(',')
printFormat(line)
output = ''
for x, field in enumerate(line):
if field:
output += pattern[x]%field
print(output)