对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正则表达式抓取成语网站
Nov 20 Python
python根据出生年份简单计算生肖的方法
Mar 27 Python
Python的时间模块datetime详解
Apr 17 Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
python manage.py runserver流程解析
Nov 08 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
Python基础之元类详解
Apr 29 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
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
JavaScript实现区块链
2018/03/14 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
三好学生自我鉴定
2013/12/17 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
《乌塔》教学反思
2014/02/17 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
服务口号大全
2014/06/11 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
失职检讨书大全
2015/01/26 职场文书
社区低保工作总结2015
2015/07/23 职场文书
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记