对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中的标识运算符
May 14 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Python基于checksum计算文件是否相同的方法
Jul 09 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
Python多图片合并PDF的方法
Jan 03 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
Python流程控制 if else实现解析
Sep 02 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
Django实现后台上传并显示图片功能
May 29 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
利用Python多线程实现图片下载器
Mar 25 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 引用(&amp;)详解
2009/11/20 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
PHP的引用详解
2015/02/22 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
PHP SOCKET编程详解
2015/05/22 PHP
jquery构造器的实现代码小结
2011/05/16 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
解决python写的windows服务不能启动的问题
2014/04/15 Python
用pycharm开发django项目示例代码
2019/06/13 Python
wxpython绘制圆角窗体
2019/11/18 Python
python学生信息管理系统实现代码
2019/12/17 Python
利用python在excel中画图的实现方法
2020/03/17 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
办公室文书岗位职责
2013/12/16 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
基层党组织整改方案
2014/10/25 职场文书
安全检查汇报材料
2014/12/26 职场文书
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers