免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3011 | 回复: 10
打印 上一主题 下一主题

关于python处理文本的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-07 11:33 |只看该作者 |倒序浏览
大家好,我的问题是如下

比如一个文本名称是1.txt

1.txt内容是:

qqqqq@gmail.com
aaaa@hotmail.com
bbbbb@gmail.com
......各种邮箱账户


那要怎么样才能把相同的邮箱整理或者打印出来呢? 好像拿这样的例子来举例更加清楚了。

希望知道的人指点一下。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-08-07 11:36 |只看该作者
是相同域的邮箱 还是 完全相同的邮箱呢。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
3 [报告]
发表于 2012-08-07 12:52 |只看该作者
  1. [liangdong@bb-browser-test00.vm.baidu.com py_project]$ ./main.py emails.txt
  2. [liangdong@bb-browser-test00.vm.baidu.com py_project]$ ll
  3. total 16
  4. -rw-rw-r--  1 liangdong liangdong  49 Aug  7 12:40 emails.txt
  5. -rw-rw-r--  1 liangdong liangdong  32 Aug  7 12:52 gmail.com
  6. -rw-rw-r--  1 liangdong liangdong  17 Aug  7 12:52 hotmail.com
  7. -rwxrwxr-x  1 liangdong liangdong 638 Aug  7 12:52 main.py
  8. [liangdong@bb-browser-test00.vm.baidu.com py_project]$ cat main.py
  9. #!/usr/local/bin/python
  10. # -*- coding: utf-8 -*-

  11. import re
  12. import sys

  13. def emails_classify(file_name):
  14.         dest_dict = {}
  15.         try:
  16.                 with open(file_name) as src_fp:
  17.                         for line in src_fp:
  18.                                 email = line.strip()
  19.                                 match_obj = re.search(r'^\w+@(\w+\.\w+), email)
  20.                                 if      match_obj:
  21.                                         domain = match_obj.group(1)
  22.                                         if domain not in dest_dict:
  23.                                                 dest_dict[domain] = open(domain, "w") # 'w' for test
  24.                                         dest_fp = dest_dict[domain]
  25.                                         dest_fp.write(email + "\n")
  26.         except:
  27.                 return -1
  28.         finally:
  29.                 for dest_domain, dest_fp in dest_dict.iteritems():
  30.                         dest_fp.close()
  31.         return 0

  32. if len(sys.argv) > 1:
  33.         emails_classify(sys.argv[1])
复制代码

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
4 [报告]
发表于 2012-08-07 13:21 |只看该作者
本帖最后由 cdtits 于 2012-08-07 13:22 编辑

回复 3# linux_c_py_php


    老兄,精通的东西蛮多的:linux + c + python + php,向你学习!

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2012-08-07 14:08 |只看该作者
Python不精, 刚开始用, 感觉像写诗, 不错...回复 4# cdtits


   

论坛徽章:
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
6 [报告]
发表于 2012-08-07 16:35 |只看该作者
emlist = ['qqqqq@gmail.com','aaaa@hotmail.com','bbbbb@gmail.com','abcd@gmail.com']
emlist = list(set(emlist))
emdict = {}
for em in emlist:
    if em.split('@')[1] not in emdict:
        emdict[em.split('@')[1]] = [em]
    else:
        emdict[em.split('@')[1]].append(em)

print(emdict)

论坛徽章:
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
7 [报告]
发表于 2012-08-07 16:43 |只看该作者
本帖最后由 ssfjhh 于 2012-08-07 16:43 编辑

emlist.sort(key = lambda x : x.split('@')[1])

简单一点的,这样整理,也挺整齐的,就看能不能满足你的需求了。

论坛徽章:
0
8 [报告]
发表于 2012-08-07 19:36 |只看该作者
搞个字典存一下就出来了

论坛徽章:
0
9 [报告]
发表于 2012-08-07 20:43 |只看该作者
其实我没看懂需求~

论坛徽章:
0
10 [报告]
发表于 2012-08-08 09:59 |只看该作者
回复 3# linux_c_py_php


    谢谢您了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP