对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入门学习之字符串与比较运算符
Oct 12 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
python 基于dlib库的人脸检测的实现
Nov 08 Python
PyQT5 emit 和 connect的用法详解
Dec 13 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
Python设计密码强度校验程序
Jul 30 Python
Python安装Bs4的多种方法
Nov 28 Python
matplotlib部件之套索Lasso的使用
Feb 24 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 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生成静态页
2006/11/25 PHP
生成卡号php代码
2008/04/09 PHP
PHP下10件你也许并不了解的事情
2008/09/11 PHP
php绘制一条直线的方法
2015/01/24 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
javascript window.opener的用法分析
2010/04/07 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
js分页代码分享
2014/04/28 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
Vue中util的工具函数实例详解
2019/07/08 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
python字符串连接的N种方式总结
2014/09/17 Python
连接Python程序与MySQL的教程
2015/04/29 Python
python爬虫使用cookie登录详解
2017/12/27 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
python实现图片压缩代码实例
2019/08/12 Python
Django实现分页显示效果
2019/10/31 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
迎八一活动主题
2014/01/31 职场文书
四年级语文教学反思
2014/02/05 职场文书
留学顾问岗位职责
2014/04/14 职场文书
资料员岗位职责范本
2015/04/13 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技