忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 2989 | 回复: 10

Python 脚本问题 [复制链接]

招聘 : 质量管理
论坛徽章:
0
发表于 2017-12-18 15:02 |显示全部楼层
1.txt 内容
/www/abcd/aaa/234 200
/www/abcd/bbb/234 400
/www/abcd/ccc/234 400
/www/abcd/bbb/234 500
/www/abcd/aaa/234 300

l= [‘aaa’,'bbb','ccc']
Sum = 0
Num = 0

f = open('1.txt','r')
for Gid in l:
    for line in f.readlines():
        if Gid in line:
            t=line.strip().split(' ')[1]
            Sum = Sum + int(t)
            Num = Num + 1
        else:
            print "Gid %s ===" %Gid
    print "Gid %s avg is %s" %(Gid ,Sum/Num)


f.close()

文本1.txt 每一行都有2段,第二段为整数,
我想在1.txt文本中提取aaa,bbb,ccc值,并且算出他们的平均值,
这个脚本问题出在哪里?




论坛徽章:
29
申猴
日期:2014-04-10 09:43:532015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:09
发表于 2017-12-18 22:14 |显示全部楼层
回复 1# blueskysee


import re
with open ('file.txt') as f:
for f in f:
  t=re.split('[/ ]',f.strip('\n'))
  d.setdefault(t[-3],[]).append(int(t[-1]))
print d
for k,v in d.items():
print '{0} is {1}  '.format(k,sum(v)/len(v))

招聘 : 质量管理
论坛徽章:
0
发表于 2017-12-19 10:46 |显示全部楼层
回复 2# zxy877298415

关键我没看出来我的问题在那里?

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2017-12-19 11:40 |显示全部楼层
回复 1# blueskysee

in 应该是个全匹配的集合操作。
而你的line只是部分有吧?

论坛徽章:
29
申猴
日期:2014-04-10 09:43:532015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:09
发表于 2017-12-19 21:09 |显示全部楼层
回复 1# blueskysee


l= ['aaa','bbb','ccc']

f = open('file.txt','r')
s = f.readlines()
for Gid in l:
   Sum = 0
    Num = 0

    for line in s:
        if Gid in line:
            t=line.strip().split(' ')[1]
            Sum = Sum + int(t)
            Num = Num + 1
        else:
             print "Gid %s ===" %Gid
    print "Gid %s avg is %d" %(Gid ,Sum/Num)

招聘 : 质量管理
论坛徽章:
0
发表于 2017-12-28 16:28 |显示全部楼层
回复 5# zxy877298415

恩, 多谢.
但是我没有弄明白, 为什么逐行读取会出问题.

论坛徽章:
130
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-12-29 00:09 |显示全部楼层
回复 3# blueskysee

打印就知道了...

$ python get_avg.py
Gid=aaa, line=/www/abcd/aaa/234 200

Gid=aaa, line=/www/abcd/bbb/234 400

Gid aaa ===
Gid=aaa, line=/www/abcd/ccc/234 400

Gid aaa ===
Gid=aaa, line=/www/abcd/bbb/234 500

Gid aaa ===
Gid=aaa, line=/www/abcd/aaa/234 300

Gid aaa avg is 250
Gid bbb avg is 250
Gid ccc avg is 250


$ cat get_avg.py
import os,sys

l= ['aaa','bbb','ccc']
Sum = 0
Num = 0

f = open('1.txt','r')
for Gid in l:
    for line in f.readlines():
        print "Gid=%s, line=%s" % (Gid, line)
        if Gid in line:
            t=line.strip().split(' ')[1]
            Sum = Sum + int(t)
            Num = Num + 1
        else:
            print "Gid %s ===" %Gid
    print "Gid %s avg is %s" %(Gid ,Sum/Num)


f.close()

论坛徽章:
0
发表于 2017-12-30 22:09 |显示全部楼层
回复 6# blueskysee

你的第二个循环文件句柄,第一次循环之后,第二次在循环文件,是从第一次的末尾接着读取文件。所以,第二次循环文件f时,内容是空。你得先读取文件存入list,再循环才行。

招聘 : 质量管理
论坛徽章:
0
发表于 2018-01-09 22:14 |显示全部楼层
回复 8# sunslj

明白了,感谢!

论坛徽章:
8
戌狗
日期:2013-10-12 11:37:19双子座
日期:2014-05-06 14:40:39巨蟹座
日期:2014-06-14 09:22:18戌狗
日期:2014-09-18 16:05:44巨蟹座
日期:2014-12-27 16:37:26酉鸡
日期:2015-01-20 18:39:022015年亚洲杯之沙特阿拉伯
日期:2015-04-20 22:38:242015亚冠之萨济拖拉机
日期:2015-06-19 16:01:03
发表于 2018-01-15 18:39 |显示全部楼层
jason680 发表于 2017-12-29 00:09
回复 3# blueskysee

打印就知道了...

完整
来自苹果客户端来自客户端
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP