对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爬虫之urllib2中的两个重要概念:Openers和Handlers
Nov 05 Python
python获得文件创建时间和修改时间的方法
Jun 30 Python
Python中的条件判断语句基础学习教程
Feb 07 Python
Python程序中用csv模块来操作csv文件的基本使用教程
Mar 03 Python
在windows系统中实现python3安装lxml
Mar 23 Python
Random 在 Python 中的使用方法
Aug 09 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
Python中使用socks5设置全局代理的方法示例
Apr 15 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
python设置中文界面实例方法
Oct 27 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
YII模块实现绑定二级域名的方法
2014/07/09 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
js玩一玩WSH吧
2007/02/23 Javascript
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
Python的subprocess模块总结
2014/11/07 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
20行python代码实现人脸识别
2019/05/05 Python
信号生成及DFT的python实现方式
2020/02/25 Python
python import 上级目录的导入
2020/11/03 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
保密承诺书范文
2014/03/27 职场文书
员工培训协议书
2014/09/15 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
SSM VUE Axios详解
2021/10/05 Vue.js