python 实现文件内容去重

文本内容去重有很多很简单的方法可以实现,很多编辑器自带去除重复行的功能。写这篇文章的原因主要有两个

有的文本文件很大,超出了编译器能读取的范围

能有代码解决的代码解决,写好代码可以在其他代码中调用,更方便使用

简单的可以分为两种情况小文件和大文件,先来看小文件去重实现。如同把大象关冰箱一样分三步:

第一步,读取文件每一行,并处理掉换行符

第二步,将文件内容去重

第三步,写到新文件里(把冰箱门关上)

上代码

def file_remove_same(input_file, output_file):

"""

针对小文件去重

:param input_file: 输入文件

:param out_file: 去重后出文件

:return:

"""

with open(input_file, 'r', encoding='utf8') as f, open(output_file, 'a', encoding='utf8') as ff:

data = [item.strip() for item in f.readlines()] # 针对最后一行没有换行符,与其他它行重复的情况

new_data = list(set(data))

ff.writelines([item + '\n' for item in new_data if item]) # 针对去除文件中有多行空行的情况

对于大文件几十个G那种(更大的也别放在本地了,放数据库)就不能加载到内存中了,强行加载到内存中直接报内存错误

解决方案是:将文件按行读取,根据内容生成一个指纹(md5值或者其他唯一可识别的值),将指纹存集合中,当逐行读取的过程中判断集合中是否已经含有该行元素的指纹。如果指纹没有添加到集合中,则添加指纹到集合中并将此行追加输出到输出文件中。如果指纹已经在集合中了,说明此行与上面的某一行重复。

def gen_md5(data):

"""

生成md5

:param data: 字符串数据

:return:

"""

md5 = hashlib.md5()

md5.update(data.encode('utf-8'))

return md5.hexdigest()

def big_file_remove_same(input_file, output_file):

"""

针对大文件文件去重(将文件文件写在一行的,没有办法去重)

:param input_file:

:param output_file:

:return:

"""

finger_print_set = set()

with open(input_file, 'r', encoding='utf8') as f, open(output_file, 'w', encoding='utf8') as ff:

for line in f:

line_string = line.strip()

finger_print = gen_md5(line_string)

if finger_print not in finger_print_set:

finger_print_set.add(finger_print)

ff.write(line)

这样解决大小文件去重的问题

还有一种极端情况,就是指纹集合非常大,将内存占用溢出。这种情况几乎不会遇到,做一个大致的估计:当这个指纹集合内存占用到3G的时候,按照集合的占用效率大致是67%算,就能容纳2G的指纹,指纹按照md5值计算,就能容纳6710万行数据 。如果文件超过6710万行可以考虑采用数据库(redis)方案。数据库方案有空再补充吧

python文件去重_python实现文件内容去重相关推荐

  1. python excelwriter保存路径_python管理文件神器 os.walk

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 来源:诡途 https://blog.csdn.net/qq_35866846/a ...

  2. python对文件的_python对文件的读写

    文件 File 什么是文件 文件是用于数据存储和单位 文件通常用来长期存储数据 文件中的数据是以字节为单位进行顺序存储的 文件的操作流程: 1. 打开文件 2. 读/写文件 3. 关闭文件 注: 任何 ...

  3. python读写文件函数_Python读写文件

    转载自:http://blog.csdn.net/adupt/article/details/4435615 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用 ...

  4. python如何进入文件夹_python之文件的读写和文件目录以及文件夹的操作实现代码...

    这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...

  5. python读写文件实例_python读写文件的简单示例

    这篇文章主要为大家详细介绍了python读写文件的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 首先看一个例子: # 来自www.512 ...

  6. python读写文件代码_Python 读写文件的操作代码

    Python读写文件模式 1.r 打开只读文件,该文件必须存在. 2.r+ 打开可读写的文件,该文件必须存在. 3.w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立 ...

  7. python 清空文件夹_python读写文件

    文件读写 文件读写,是Python代码调用电脑文件的主要功能,能被用于读取和写入文本记录.音频片段.Excel文档.保存邮件以及任何保存在电脑上的东西. ①读取文件 首先,我们在桌面新建一个text文 ...

  8. python 读写文件 另存为_python读写文件(五)

    今天继续分享python读写文件. 首先介绍一个新的函数open(),这个函数是干什么的呢?在python里面可以用open函数来打开文件.要用open函数打开一个文件,就是要向它传递一个字符串路径, ...

  9. python遍历文件目录_python遍历文件夹及其子目录

    1. os.listdir(path) 返回指定的文件夹包含的文件或文件夹的名字的列表 2. walk(top, topdown=True, οnerrοr=None, followlinks=Fal ...

  10. 打开python文件式_Python File(文件) 方法

    Python File(文件) 方法 open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OS ...

最新文章

  1. mysql8.0取消授权_mysql8创建用户、删除用户、授权、取消授权
  2. 还在用if(obj!=null)做非空判断?带你快速上手Optional实战性理解!
  3. Leetcode刷题 463题:岛屿的周长(基于Java语言)
  4. 使用gulp进行React任务的构建
  5. 史上最具体Android集成QQ,微信,微博分享(不用第三方)持续更新中
  6. 你是什么类型的程序员?
  7. Mac环境下安装Sass
  8. python变量分配内存_Python | 声明任何变量而不分配任何值
  9. 1+X web中级 Laravel学习笔记——查询构造器简介及新增、更新、删除、查询数据
  10. 导航第四版-分类专栏
  11. 自动驾驶专题研究报告:自动驾驶产业链全梳理
  12. ES系列:解决Cluster state has not been recovered yet, cannot write to the [null] index问题
  13. 解决node报错: jwt expired
  14. load average 计算
  15. 前端框架千千万,每隔两年翻一番
  16. SIW-微带过渡结构
  17. 姓名如果取得好,也能趋吉避凶
  18. 同时打开对比两个pdf文件软件推荐
  19. ASp.net判断文件或文件夹是否存在
  20. CGAL Cookbook --CGAL简介

热门文章

  1. 根据工资计算税费html,税后工资计算器2018 个人所得税excel计算公式
  2. iPhone X改11Pro在线/免越狱QQ空间任意iPhone机型虚拟定位
  3. journalctl用法详解
  4. [相关工具] Flash CC 破解版下载
  5. python 公众号开发框架_基于werobot框架的微信公众号开发
  6. Android studio 导入项目运行
  7. pandas库的使用
  8. CentOS7安装uwsgi遇到的坑解决方法
  9. 如何选出好用的仓库库存管理系统软件?看文章就知道了
  10. c语言程序设计商品库存管理系统,《C语言课程设计商品库存管理系统》.doc