2016-10-31 69 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