2016-10-31 37 views
1
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) 

这是我的代码here.I想打印一些好的格式的值,但这里是问题。如果所有的值都是float,代码工作正常。当它是空间或别的东西,将会出现错误。我想将所有非浮点值替换为' - ',并且仍然处于良好格式。 这里是例如输入:Python输出替换不浮点值

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像你这样
  • 拆分格式过于
  • 压缩它们并使用针对浮动转换值
  • 每种格式生成listcomp如果该值是空的,由长度代替它(("-"+" "*(len(f % 0.0)-1)发出破折号+计算格式化长度减1和填充空格)
  • 最后加上特殊格式
  • 加入由此产生的li ST与空间

这里是我的解决方案:

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 
+0

谢谢!认为你的答案更短! – honesty1997

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) 
+0

哦!谢谢不知道我可以把这个结合起来! – honesty1997