免费注册 查看新帖 |

Chinaunix

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

python 大文件去重问题 [复制链接]

论坛徽章:
0
发表于 2015-11-20 23:45 |显示全部楼层
本帖最后由 yhizyh 于 2015-11-20 23:46 编辑

今天遇到一个问题,处理几个大文件,1个文件为2G ,1个文件大小为  4G,我看了一下里面数据条数是129115369 条,现在这些数据有很多都是重复的,不是逐行重复,不一定那条和那条重复,我要去掉重复数据,可是用了set 、sort都不能正常处理这个文件,肯定不是我程序的问题,同样内容的文件我处理800-900M都可以,就是2个特大的处理不了。所以请教一下对于这种特大文件有什么办法没有。谢谢了

-rw-rw-r-- 1 root root 2.7G 11月 20 21:24 f10.txt
-rw-rw-r-- 1 root root 4.6G 11月 20 22:40 f11.txt
-rw-rw-r-- 1 root root  65M 11月 20 20:33 f6.txt
-rw-rw-r-- 1 root root 218M 11月 20 20:34 f7.txt
-rw-rw-r-- 1 root root 604M 11月 20 20:38 f8.txt
-rw-rw-r-- 1 root root 1.4G 11月 20 20:51 f9.txt
-rw-r----- 1 root root  838 11月 20 22:50 RemoveSimilar.py

目前就是两个最大的文件处理不了。
通过list(set())方法处理的部分代码
  1. def modi_File(filename):
  2.     sFile="out/"+filename
  3.     oFile="out1/"+filename
  4.     fp = file(sFile,"r")
  5.     lines = fp.readlines()
  6.     fp.close()
  7.     index =0
  8.     count =len(lines)
  9.     while index<count:
  10.         lines[index]=lines[index].strip("\n")
  11.         index +=1
  12.     flines=list(set(lines))
  13.     fp_w=file(oFile,"w")
  14.     count=0
  15.     for line in flines:
  16.         fp_w.write(str(line)+"\n")
  17.         count +=1
  18.     fp_w.write("数据总量:%s"%count)
  19.     fp_w.close()
复制代码

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
发表于 2015-11-21 10:13 |显示全部楼层
我是小白
还请前辈多多指导。
  1. #!/usr/bin/python2
  2. # coding: utf-8


  3. def modi (filename):
  4.     IN    = '/tmp/' + filename        # "out/" + filename
  5.     OUT   = '/tmp/' + '_' + filename  # "out1/" + filename
  6.     fhi   = open (IN)
  7.     fho   = open (OUT, 'w')
  8.     uniq  = set ()
  9.     count = 0

  10.     for line in fhi:
  11.         if line in uniq: continue
  12.         uniq.add (line)
  13.         count += 1
  14.         fho.write (line)

  15.     fho.write ("数据总量:%s" % count)
  16.     fhi.close ()
  17.     fho.close ()


  18. modi ('xyz')
复制代码

论坛徽章:
0
发表于 2015-11-21 15:05 |显示全部楼层
回复 2# substr函数


    太棒了,上次也是麻烦您了。非常感谢。

论坛徽章:
0
发表于 2016-04-05 16:36 |显示全部楼层
回复 1# yhizyh
这样的问题,不用编程,用UNIX命令
  1. cat filename | sort | uniq
复制代码

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-14 06:20:00每日论坛发贴之星
日期:2015-10-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-08 06:20:00
发表于 2016-04-19 14:15 |显示全部楼层
问题出在这一行代码上
  1. lines = fp.readlines()
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP