对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 ZipFile模块详解
Nov 01 Python
Python 字典dict使用介绍
Nov 30 Python
python uuid模块使用实例
Apr 08 Python
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 Python
Django model反向关联名称的方法
Dec 15 Python
set在python里的含义和用法
Jun 24 Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 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 __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
php开发工具有哪五款
2015/11/09 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
jtable列中自定义button示例代码
2013/11/21 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
Python实现测试磁盘性能的方法
2015/03/12 Python
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
Fabric 应用案例
2016/08/28 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
pycharm快捷键汇总
2020/02/14 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
写自荐信有哪些不宜?
2013/10/17 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
经典演讲稿汇总
2014/05/19 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
文明家庭事迹材料
2014/12/20 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL