免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1735 | 回复: 4

2个文件比较的问题 [复制链接]

论坛徽章:
0
发表于 2013-01-16 12:09 |显示全部楼层
本帖最后由 nxzwt 于 2013-01-16 19:28 编辑

有2个文件a和b
a的内容如下,有100多万行
1.1.1.10     20
1.1.1.34     25
2.2.2.100   30
3.3.3.20     40
b的内容如下,有1万多行
1.1.1.0    1.1.1.31     财务一部
1.1.1.32   1.1.1.63    财务二部
2.2.2.0    2.2.2.127   技术部
3.3.3.0    3.3.3.63     人事部

要求从a里面读出数据,和b比较后输出成
1.1.1.10    20    财务一部
1.1.1.34    25    财务二部
2.2.2.100   30   技术部
3.3.3.20    40    人事部

这个用python该怎么做?请高手指点,谢谢!!

论坛徽章:
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
发表于 2013-01-16 14:51 |显示全部楼层
本帖最后由 ssfjhh 于 2013-01-16 14:52 编辑

你只说对比,却没有说对比哪些东西,不够准确。
我写了个,看能不能满足要求。
  1. >>> a = '''1.1.1.10     20
  2. 2.2.2.100   30
  3. 3.3.3.20     40'''
  4. >>> b = '''1.1.1.0    1.1.1.31     财务部
  5. 2.2.2.0    2.2.2.127   技术部
  6. 3.3.3.0    3.3.3.63     人事部'''
  7. >>> adict = {e[:6]:e for e in a.split('\n')}
  8. >>> bdict = {e[:6]:e for e in b.split('\n')}
  9. >>> sorted(adict[k] + (bdict[k][-4:]) for k in bdict.keys())
  10. ['1.1.1.10     20 财务部', '2.2.2.100   30 技术部', '3.3.3.20     40 人事部']
  11. >>> '\n'.join(sorted(adict[k] + (bdict[k][-4:]) for k in bdict.keys()))
  12. '1.1.1.10     20 财务部\n2.2.2.100   30 技术部\n3.3.3.20     40 人事部'
  13. >>>
复制代码

论坛徽章:
0
发表于 2013-01-16 15:15 |显示全部楼层
是我没有说清楚。
a文件有100多万行,记录了IP地址和某个统计次数,比对是把a里面的IP地址和b记录的IP地址段结果进行比对,要求核实a里面的ip地址落到b记录的哪个部门。

论坛徽章:
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
发表于 2013-01-17 09:25 |显示全部楼层
本帖最后由 ssfjhh 于 2013-01-17 09:40 编辑

我这里没有文件,我也没有办法测试。你需要在文件里添加上你的文件地址。
  1. apath = ''
  2. bpath = ''
  3. acopypath = ''

  4. bdict = {}
  5. with open(bpath) as b:
  6.     for line in b:
  7.         c,d,e = tuple(line.split())
  8.         bdict[e] = (tuple(map(int, c.split('.'))), tuple(map(int,d.split('.'))))

  9. acopy = open(acopypath, 'w')
  10. with open(apath) as a:
  11.     for line in a:
  12.         for k,v in bdict.items():
  13.             if v[0] <= tuple(map(int, line.split()[0].split('.'))) <= v[1]:
  14.                 acopy.write(line.strip('\n') + '    ' + k + '\n')
  15.                     break
  16.     acopy.close()
  17. print('Write successfully')
复制代码

论坛徽章:
0
发表于 2013-01-17 09:48 |显示全部楼层
非常感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP