免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5356 | 回复: 15

python 文本处理 [复制链接]

论坛徽章:
0
发表于 2014-01-15 18:41 |显示全部楼层
[www.aa.com]
192.168.10.10
192.168.10.11
192.168.10.12
192.168.10.13

[mail.aa.com]
192.168.10.14
192.168.10.15
192.168.10.16

[db.aa.com]
192.168.10.17
192.168.10.18

[oa.aa.com]
192.168.10.19
192.168.10.20
192.168.10.21
192.168.10.22
192.168.25.14
192.168.10.25

日志内容见上

要求使用python ,从每个域中取出一个ip和对应的域名
效果如下:
www.aa.com  192.168.10.10
mail.aa.com    192.168.10.14
db.aa.com      192.168.10.17
oa.aa.com      192.168.10.19

请各位大神指教,谢谢!

论坛徽章:
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
发表于 2014-01-15 19:21 |显示全部楼层
ConfigParse

论坛徽章:
2
狮子座
日期:2014-01-17 09:09:212015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2014-01-15 19:43 |显示全部楼层
本帖最后由 cnvbird 于 2014-01-15 19:47 编辑
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-

  3. import re

  4. ret_list = []
  5. flag = False
  6. with open('log.txt', 'r') as f:
  7.     my_str = ''
  8.     for line in f.readlines():
  9.         if re.search(r'^\[.*\], line):
  10.             flag = False
  11.             my_str += ' ' + line.strip()
  12.         else:
  13.             if not flag:
  14.                 my_str += ' ' + line.strip()
  15.                 flag = True
  16.                 ret_list.append(my_str)
  17.                 my_str = ''
  18.    
  19. print ret_list
复制代码

论坛徽章:
2
狮子座
日期:2014-01-17 09:09:212015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2014-01-15 19:48 |显示全部楼层
[' [www.aa.com] 192.168.10.10', ' [mail.aa.com] 192.168.10.14', ' [db.aa.com] 192.168.10.17', ' [oa.aa.com] 192.168.10.19']
亲!满足你吗?

论坛徽章:
0
发表于 2014-01-16 09:42 |显示全部楼层
不用重复造轮子吧,2楼建议挺好

论坛徽章:
0
发表于 2014-01-16 09:56 |显示全部楼层
本帖最后由 liheng 于 2014-01-16 10:02 编辑

很感谢各位大神的热心帮助。这里我贴下我的解决方法:


#!/usr/bin/env python
# -*- coding:utf-8 -*-
file = open("log.log", 'r')
all_domain = []
new_domain= {}

while 1:
    line= file.readline()
    all_domain.append(line.strip('\n'))
    if not line:
        break
    pass
n = 0
for d in all_domain:
    n += 1
    if "]" in d:
        new_domain[d] = all_domain[n]

for(k,v) in new_domain.items():
    print k,v


思路大致是:先读到一个list里面,再遍历,如果某一个字符串是"]"结尾的,就取它以及它的下一个字符串,扔到一个dict里面

再次感谢大家的热帮助,谢谢!

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
发表于 2014-01-16 10:11 |显示全部楼层
本帖最后由 ssfjhh 于 2014-01-16 10:12 编辑

再造个轮子。
  1. import os, re
  2. res_dict = {}
  3. regexdomain = re.compile(r'\[(?P<domain>.*)\]')
  4. regexip = re.compile(r'(?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})')
  5. with open('log.txt', 'r') as f:
  6.     for line in f.readlines():
  7.         domain = regexdomain.search(line)
  8.         ip = regexip.search(line)
  9.         if domain:
  10.             key = domain.group('domain')
  11.         elif ip:
  12.             res_dict.setdefault(key, ip.group('ip'))

  13. print(res_dict)
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-01-16 10:47 |显示全部楼层
回复 1# liheng
  1. [root@source ~]# awk -v RS="\n\n" '{gsub(/\[|\]/,"",$1);print $1"\t"$2}' file
  2. www.aa.com        192.168.10.10
  3. mail.aa.com        192.168.10.14
  4. db.aa.com        192.168.10.17
  5. oa.aa.com        192.168.10.19
复制代码

论坛徽章:
2
狮子座
日期:2014-01-17 09:09:212015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2014-01-16 11:38 |显示全部楼层
高手!!!!

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
发表于 2014-01-16 14:22 |显示全部楼层
回复 8# TasteOracle


    擦,一行搞定,这是来砸场子的吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP