对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三元运算符实现方法
Dec 17 Python
Python提取网页中超链接的方法
Sep 18 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
基于python OpenCV实现动态人脸检测
May 25 Python
详解flask表单提交的两种方式
Jul 21 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
python定时任务 sched模块用法实例
Nov 04 Python
python序列化与数据持久化实例详解
Dec 20 Python
详解Python高阶函数
Aug 15 Python
python 实现有道翻译功能
Feb 26 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
php读取html并截取字符串的简单代码
2009/11/30 PHP
php验证手机号码
2015/11/11 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
12步教你理解Python装饰器
2016/02/25 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
python 字符串只保留汉字的方法
2018/11/16 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
应付会计岗位职责
2013/12/12 职场文书
小学社会实践活动总结
2014/07/03 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
学习退步检讨书
2014/09/28 职场文书
起诉书格式范文
2015/05/20 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android