对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的Django框架使用的一些实用建议
Apr 03 Python
Python复数属性和方法运算操作示例
Jul 21 Python
python随机取list中的元素方法
Apr 08 Python
python实现黑客字幕雨效果
Jun 21 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
Python3如何使用range函数替代xrange函数
Oct 05 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
如何选购合适的收音机
2021/03/01 无线电
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php数组去重复数据示例
2014/02/25 PHP
php实现telnet功能示例
2014/04/08 PHP
php基础教程
2015/08/26 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
js运动应用实例解析
2015/12/28 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
python 循环数据赋值实例
2019/12/02 Python
python Canny边缘检测算法的实现
2020/04/24 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
管理科学大学生求职信
2013/11/13 职场文书
学校安全工作制度
2014/01/19 职场文书
年度考核评语
2014/01/19 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
Python数据结构之队列详解
2022/03/21 Python
angular4实现带搜索的下拉框
2022/03/25 Javascript
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL