对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脚本来实现最简单的FTP下载的教程
May 04 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
Python用字典构建多级菜单功能
Jul 11 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
OpenCV 之按位运算举例解析
Jun 19 Python
python如何快速生成时间戳
Jul 21 Python
浅谈python锁与死锁问题
Aug 14 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
Python实现滑雪小游戏
Sep 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 curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
php验证码生成代码
2015/11/11 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
Python记录详细调用堆栈日志的方法
2015/05/05 Python
python实现感知器算法详解
2017/12/19 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
前台文员的岗位职责
2013/11/14 职场文书
《金子》教学反思
2014/04/13 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
Pandas 稀疏数据结构的实现
2021/07/25 Python
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA