您可以用列表解析,可以讓你做的if/else條件下做到這一點。作爲測試
>>> i = ['11', '', '3.3', '']
>>> sum(float(v) if v else 0.0 for v in i)
14.3
付諸你的代碼中得到
from datetime import datetime
import csv
with open('input1.txt') as inputfile:
reader = csv.reader(inputfile,delimiter='\t')
inputm = list(reader) #contents of csv
for i in inputm[1:]:
print('\n', str(datetime.strptime(i[0].split(':')[1], '%Y%m%d'))[:10],
i[1], sum(float(v) if v else 0.0 for v in i[2:6])/4,i[6])
更新
可能很難呈現的例子有標籤,因爲計算器過濾出來。一種技術是編寫一些將字節寫入測試文件的代碼,以便其他人可以運行該代碼。下面是一個工作示例,顯示csv
模塊如何識別最後一行中有一個空的製表符分隔的單元格,並將其替換爲空字符串。轉換工作!
# write a test file we can work with
open('mytest.csv', 'wb').write(
b"""1:20150501\t123\t10\t20\t0\t0\t'xyz'
2:20150501\t124\t0\t20.6\t90\t18.7\t'abc'
3:20150501:replacement\t123\t10.9\t20.3\t0\t80\t'def'
4:20150501\t134\t10\t20\t50.6\t0\t'ghi'
5:20150501\t126\t10.7\t26.8\t0\t0\t'jkl'
6:20150501\t123\t8.9\t20\t0\t\t'mno'""")
import csv
with open('mytest.csv', newline='') as fp:
reader = csv.reader(fp, delimiter='\t', skipinitialspace=True)
for row in reader:
converted = [float(v) if v else 0.0 for v in row[1:5]]
print(row, converted)
輸出:
['1:20150501', '123', '10', '20', '0', '0', "'xyz'"] [123.0, 10.0, 20.0, 0.0]
['2:20150501', '124', '0', '20.6', '90', '18.7', "'abc'"] [124.0, 0.0, 20.6, 90.0]
['3:20150501:replacement', '123', '10.9', '20.3', '0', '80', "'def'"] [123.0, 10.9, 20.3, 0.0]
['4:20150501', '134', '10', '20', '50.6', '0', "'ghi'"] [134.0, 10.0, 20.0, 50.6]
['5:20150501', '126', '10.7', '26.8', '0', '0', "'jkl'"] [126.0, 10.7, 26.8, 0.0]
['6:20150501', '123', '8.9', '20', '0', '', "'mno'"] [123.0, 8.9, 20.0, 0.0]
我想檢查其空字符串或不映射數據浮動之前...它的存在在我的print語句... – Teja
是什麼原因導致你做檢查? – Goyo