Board logo

标题: [问题求助] 这个数据处理,用python怎么做? [打印本页]

作者: netdzb    时间: 2020-3-30 15:01     标题: 这个数据处理,用python怎么做?

假设有这样一个文本,

11.550,已支付,2019-09-15 21:39:03,2019-12-30 13:21:35
10.870,已支付,2019-09-15 21:39:03,2019-09-16 12:51:36
10.350,已支付,2019-02-09 07:20:59,2019-02-11 10:56:55
10.010,已支付,2018-06-30 10:24:07,2018-07-02 12:32:31
10.620,已支付,2016-09-24 07:21:55,2016-09-26 11:45:12

需要得到11.55+10.87+10.35+10.01+10.62的结果。
如果读入列表的话,一共是5个列表,还有其它办法吗?
作者: wujunkai    时间: 2020-3-30 15:33

回复 1# netdzb


    提供两个方案。
  1. ans=0
  2. fin=open('text.txt','r')
  3. for i in fin:
  4.     ans+=float(i.split(',')[0])
  5. fin.close()
  6. print(ans)
复制代码
和一行极简的代码
  1. print(sum(map(float,map(lambda i:i.split(',')[0],open('text.txt','r')))))
复制代码

作者: netdzb    时间: 2020-3-30 17:53

回复 2# wujunkai


胶水真够牛的,一行解决问题了。
作者: wujunkai    时间: 2020-3-30 18:06

回复 3# netdzb


    说实话,不建议那样用。在大型程序里面,句柄没有关闭会出现各种各样的bug....
作者: sxw    时间: 2020-4-17 21:43

本帖最后由 sxw 于 2020-4-17 21:46 编辑

使用 raku, => raku.org
  1. say [+] $=finish.lines».comb(/^ <( \d+ [\.\d+]? )>\,/)».[0];
  2. =finish
  3. 11.550,已支付,2019-09-15 21:39:03,2019-12-30 13:21:35
  4. 10.870,已支付,2019-09-15 21:39:03,2019-09-16 12:51:36
  5. 10.350,已支付,2019-02-09 07:20:59,2019-02-11 10:56:55
  6. 10.010,已支付,2018-06-30 10:24:07,2018-07-02 12:32:31
  7. 10.620,已支付,2016-09-24 07:21:55,2016-09-26 11:45:12
复制代码
输出:53.4
作者: bailong360    时间: 2020-4-17 22:11

用列表解析其实更短
  1. print(sum(float(i.split(',')[0]) for i in open('test.txt')))
复制代码
或者 AWK
  1. awk -F',' '{sum+=$1}END{print(sum)}' test.txt
复制代码
或者 cut + paste + bc
  1. cut -d',' -f1 test.txt | paste -sd+ | bc
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2