对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进阶教程之词典、字典、dict
Aug 29 Python
python中pygame模块用法实例
Oct 09 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
python查看矩阵的行列号以及维数方式
May 22 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 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队列用法实例
2014/11/05 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
基于jquery的表格排序
2010/09/11 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python列表append和+的区别浅析
2015/02/02 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
软件测试常见笔试题
2012/02/04 面试题
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
优秀员工评优方案
2014/06/13 职场文书
门店店长岗位职责
2015/04/14 职场文书
法人代表资格证明书
2015/06/18 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers