对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 25 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
Python实现模拟时钟代码推荐
Nov 08 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
python logging 日志轮转文件不删除问题的解决方法
Aug 02 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
基于python实现名片管理系统
Nov 30 Python
python解析多层json操作示例
Dec 30 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
Python下划线5种含义代码实例解析
Jul 10 Python
python实现经纬度采样的示例代码
Dec 10 Python
python实现马丁策略回测3000只股票的实例代码
Jan 22 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
实用函数4
2007/11/08 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
Python迭代和迭代器详解
2016/11/10 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
如何基于Python按行合并两个txt
2020/11/03 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
公务员爱岗敬业演讲稿
2014/08/26 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
庐山导游词
2015/02/03 职场文书
应聘教师求职信范文
2015/03/20 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
python标准库ElementTree处理xml
2022/05/20 Python