对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 相关文章推荐
在Django中创建第一个静态视图
Jul 15 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
python直接访问私有属性的简单方法
Jul 25 Python
Python脚本获取操作系统版本信息
Dec 17 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
Flask-WTF表单的使用方法
Jul 12 Python
django settings.py 配置文件及介绍
Jul 15 Python
wxPython之wx.DC绘制形状
Nov 19 Python
python构建指数平滑预测模型示例
Nov 21 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
python实现自定义日志的具体方法
May 28 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实例分享之二维数组排序
2014/05/15 PHP
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
python实现文本文件合并
2015/12/29 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
python实现两张图片的像素融合
2019/02/23 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
大四自我鉴定
2014/02/08 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
残疾人小组计划书
2014/04/27 职场文书
企业总经理任命书
2014/06/05 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
护士自荐信怎么写
2015/03/06 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
会计专业自荐信范文
2019/05/22 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js