对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中的文件和目录操作实现代码
Mar 13 Python
Python中你应该知道的一些内置函数
Mar 31 Python
Django验证码的生成与使用示例
May 20 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
python中altair可视化库实例用法
Jan 26 Python
python 批量将中文名转换为拼音
Feb 07 Python
pycharm无法导入lxml的解决办法
Mar 31 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 Python
详解Golang如何实现支持随机删除元素的堆
Sep 23 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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
php查询操作实现投票功能
2016/05/09 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
jQuery 获取对象 定位子对象
2010/05/31 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
python 自动批量打开网页的示例
2019/02/21 Python
浅析Python3 pip换源问题
2020/01/06 Python
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
开学典礼感言
2014/02/16 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
英语系毕业生求职信
2014/07/13 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
电信营业员岗位职责
2015/04/14 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript