我找不到如何将第3列中的所有值相加,以在带有第一列和第二列的新csv文件中获得结果的方法。
行的可变值可以是1到7,如果存在0.5,1或2以外的值或字符,则将忽略加法
csv文件的示例:
323|2013-06-03 00:00:00|0|0|0
323|2013-06-03 01:00:00|1|
323|2013-06-03 02:00:00|1|0|0.5|86
323|2013-06-03 03:00:00|1|0|0.5|0
323|2013-06-03 04:00:00|0
323|2013-06-03 05:00:00|0|0|0.5|0
323|2013-06-03 06:00:00|0
323|2013-06-03 07:00:00|1|0|0.5|2
323|2013-06-03 08:00:00|0|0.5
我正在寻找什么:
323|2013-06-03 00:00:00|0
323|2013-06-03 01:00:00|1
323|2013-06-03 02:00:00|1.5
323|2013-06-03 03:00:00|1.5
323|2013-06-03 04:00:00|0
323|2013-06-03 05:00:00|0.5
323|2013-06-03 06:00:00|0
323|2013-06-03 07:00:00|3.5
323|2013-06-03 08:00:00|0.5
答案 0 :(得分:2)
您可以使用csv
模块。请注意,这给出了一个列表列表,每个子列表中的最终值均为float
。您将需要一些其他逻辑才能从列表列表中写入csv文件。我将其保留为练习。
import csv
from io import StringIO
mystr = StringIO("""323|2013-06-03 00:00:00|0|0|0
323|2013-06-03 01:00:00|1|
323|2013-06-03 02:00:00|1|0|0.5|86
323|2013-06-03 03:00:00|1|0|0.5|0
323|2013-06-03 04:00:00|0
323|2013-06-03 05:00:00|0|0|0.5|0
323|2013-06-03 06:00:00|0
323|2013-06-03 07:00:00|1|0|0.5|2
323|2013-06-03 08:00:00|0|0.5""")
L = []
with mystr as fin:
reader = csv.reader(fin, delimiter='|')
for i, j, *k in reader:
L.append([i, j, sum(i for i in map(float, filter(None, k)) if i in {0.5, 1, 2})])
结果
print(L)
[['323', '2013-06-03 00:00:00', 0.0],
['323', '2013-06-03 01:00:00', 1.0],
['323', '2013-06-03 02:00:00', 1.5],
['323', '2013-06-03 03:00:00', 1.5],
['323', '2013-06-03 04:00:00', 0.0],
['323', '2013-06-03 05:00:00', 0.5],
['323', '2013-06-03 06:00:00', 0.0],
['323', '2013-06-03 07:00:00', 3.5],
['323', '2013-06-03 08:00:00', 0.5]]