找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 15923|回复: 5

[问题求助] 这个数据处理,用python怎么做?

[复制链接]
发表于 2020-3-30 15:01:04 | 显示全部楼层 |阅读模式
假设有这样一个文本,

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个列表,还有其它办法吗?
发表于 2020-3-30 15:33:13 | 显示全部楼层
回复 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')))))
复制代码
 楼主| 发表于 2020-3-30 17:53:51 | 显示全部楼层
回复 2# wujunkai


胶水真够牛的,一行解决问题了。
发表于 2020-3-30 18:06:41 | 显示全部楼层
回复 3# netdzb


    说实话,不建议那样用。在大型程序里面,句柄没有关闭会出现各种各样的bug....
发表于 2020-4-17 21:43:00 | 显示全部楼层
本帖最后由 sxw 于 2020-4-17 21:46 编辑

使用 raku, => raku.org

  1. say [+] $=finish.lines&#187;.comb(/^ <( \d+ [\.\d+]? )>\,/)&#187;.[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
发表于 2020-4-17 22:11:55 | 显示全部楼层
用列表解析其实更短
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:38 , Processed in 0.013847 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表