Python输出替换不浮动值

时间:2016-10-31 07:57:47

标签: python input output

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

不知道如何用' - '替换无浮点值。在空间的中间。

2 个答案:

答案 0 :(得分:2)

  • 像你一样拆分a
  • 分割格式
  • 压缩它们并使用针对浮动转换值的每种格式生成listcomp
  • 如果该值为空,请将其替换为有效字段的长度,但为虚线(("-"+" "*(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)