对python数据切割归并算法的实例讲解


Posted in Python onDecember 12, 2018

当一个 .txt 文件的数据过于庞大,此时想要对数据进行排序就需要先将数据进行切割,然后通过归并排序,最终实现对整体数据的排序。要实现这个过程我们需要进行以下几步:获取总数据行数;根据行数按照自己的需要对数据进行切割;对每组数据进行排序 最后对所有数据进行归并排序。

下面我们就来实现这整个过程:

一:获取总数据的行

def get_file_lines(file_path):
 # 目标文件的路径
 file_path = str(file_path)
 with open(file_path, 'rb') as file:
  # 定义行数
  i = 0
  while True:
   # 一次读取一行数据
   line = file.readline()
   if not line :
    break
   else:
    # 每读一行,行数加一
    i += 1
   #设置进度条,每当i读取1000000行时打印一次i
   # 每当读取1000000的整数倍行时,打印行数(进度条)
   if i % 1000000 == 0:
    print(i)
  # 打印总行数
  print(i)
  return i

二:对数据进行切割

# 定义均等切割函数,num是待切割的文件的行数的值,n为切割份数,file_path是待切割的文件,file_dir是切割好的文件写入的目录
def evg_split(num, n, file_path, file_dir):
 last_list = []
 # 如果样本刚好可以整除为n份
 if num % n == 0:
  for i in range(n):
   # 则直接将样本分为n分没份对应num/n个
   last_list.append(num / n)
 # 如果不能整除
 if num % n != 0:
  # 如果不能整除,则先将num整除n-1并取n-1份,余下的单独做一份
  evg = (num - num % n) // (n - 1)
  for i in range(n):
   last_list.append(evg)
  last_list.append(num % (n - 1))
 print(last_list)
 # return last_list
 # 对应于切割后的每一份数据
 with open(file_path, 'rb') as path:
  for i in range(n):
   # 创建临时文件
   tmp_file = file_dir + str(i) + '.txt'
   # 打开临时文件,将内容一条一条的写入
   file = open(tmp_file, 'wb')
   for j in range(int(last_list[i])):
    line = path.readline()
    file.write(line)
    print(line)
   print('------------')
   file.close()

三:对每组数据进行排序的内容由读者根据自身数据需要进行排序,下面直接介绍归并排序

四:归并排序

def merge( mylist1, mylist2, file1):
 while len(mylist1) > 0 and len(mylist2) > 0:
  if mylist1[0]<mylist2[0]:
   with open(file1,'a') as file:
    file.write(str(mylist1[0]))
    del mylist1[0]
  elif mylist1[0] > mylist2[0]:
   with open(file1,'a') as file:
    file.write(str(mylist2[0]))
    del mylist2[0]
  else:
   with open(file1,'a') as file:
    file.write(str(mylist1[0]))
    file.write(str(mylist2[0]))
    del mylist1[0]
    del mylist2[0]
 with open(file1, 'a') as file:
  for i in mylist1:
   file.write(str(i))
  for i in mylist2:
   file.write(str(i))

总结:对于一个大型数据文件,我们可以将其切割成若干个小型的数据文件,然后分别的这些小型的数据文件进行排序,最后使用归并排序将这些数据文件写入到一个总体文件中,从而实现了对这个大型数据文件的排序。

以上这篇对python数据切割归并算法的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
python自动化报告的输出用例详解
May 30 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
python pyheatmap包绘制热力图
Nov 09 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
python+opencv实现阈值分割
Dec 26 Python
python之mock模块基本使用方法详解
Jun 27 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
python实现文本界面网络聊天室
Dec 12 #Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 #Python
python实现简单多人聊天室
Dec 11 #Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 #Python
python 划分数据集为训练集和测试集的方法
Dec 11 #Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 #Python
想学python 这5本书籍你必看!
Dec 11 #Python
You might like
php empty函数 使用说明
2009/08/10 PHP
hessian 在PHP中的使用介绍
2010/12/13 PHP
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
python抓取网页内容示例分享
2014/02/24 Python
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
《蒲公英》教学反思
2014/02/28 职场文书
项目投资建议书
2014/05/16 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
酒店开业主持词
2015/07/02 职场文书