对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进阶教程之函数对象(函数也是对象)
Aug 30 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
Apr 11 Python
pytorch构建网络模型的4种方法
Apr 13 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
Django 路由层URLconf的实现
Dec 30 Python
详解scrapy内置中间件的顺序
Sep 28 Python
python实现学生通讯录管理系统
Feb 25 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 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的ASP防火墙
2006/10/09 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
python同时给两个收件人发送邮件的方法
2015/04/30 Python
在python中画正态分布图像的实例
2019/07/08 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
sklearn+python:线性回归案例
2020/02/24 Python
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
复核员上岗演讲稿
2014/01/05 职场文书
校园公益广告语
2014/03/13 职场文书
平安校园建设方案
2014/05/02 职场文书
研究生导师评语
2014/12/31 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers