python实现大文件分割与合并


Posted in Python onJuly 22, 2019

很多时候我们会面临大文件无法加载到内存,或者要传输大文件的问题。这时候就需要考虑将大文件分割为小文件进行处理了。

下面是一种用python分割与合并分件的实现。

import os
FILE_DIR = os.path.dirname(os.path.abspath(__file__))

#========================================================
# 文件操作
#========================================================
def get_filelist1(dir, postfix):
  '''
  按照后缀返回文件名列表
  INPUT -> 目录地址, 文件后缀
  OUTPUT -> 文件名列表
  '''
  return [os.path.join(dir, f) for f in os.listdir(dir) if f.endswith(postfix)]

def get_filelist2(dir, preffix):
  '''
  按照前缀返回文件名列表
  INPUT -> 目录地址, 文件前缀
  OUTPUT -> 文件名列表
  '''
  return [os.path.join(dir, f) for f in os.listdir(dir) if f.startswith(preffix)]

def get_file_postfix(filename):
  '''
  获取文件名后缀
  INPUT -> 文件名
  OUTPUT -> 文件后缀
  '''
  file = os.path.splitext(filename)
  preffix, postfix = file
  return postfix

def get_file_preffix(filename):
  '''
  获取文件名前缀
  INPUT -> 文件名
  OUTPUT -> 文件前缀
  '''
  file = os.path.splitext(filename)
  preffix, postfix = file
  return preffix

def file_chunkspilt(path, filename, chunksize):
  '''
  文件按照数据块大小分割为多个子文件
  INPUT -> 文件目录, 文件名, 每个数据块大小
  '''
  if chunksize > 0:
    filepath = path+'/'+filename
    partnum = 0
    inputfile = open(filepath, 'rb')
    while True:
      chunk = inputfile.read(chunksize)
      if not chunk:
        break
      partnum += 1
      newfilename = os.path.join(path, (filename+'_%04d' % partnum))
      sub_file = open(newfilename, 'wb')
      sub_file.write(chunk)
      sub_file.close()
    inputfile.close()
  else:
    print('chunksize must bigger than 0!')

def file_linespilt(path, filename, limit):
  '''
  文件按照行分割成多个子文件
  INPUT -> 文件目录, 文件名, 行数
  '''
  if limit > 0:
    preffix = get_file_preffix(filename)
    postfix = get_file_postfix(filename)
    file_count = 0
    l_list = []
    with open(path+'/'+filename, 'rb') as f:
      for line in f:
        l_list.append(line)
        if len(l_list) < limit:
          continue
        subfile = preffix+"_"+str(file_count)+"."+postfix
        with open(FILE_DIR+'/'+subfile, 'wb') as file:
          for l in l_list[:-1]:
            file.write(l)
          file.write(l_list[-1].strip())
          l_list=[]
          file_count += 1
  else:
    print('limit must bigger than 0!')

def file_combine(path, filename):
  '''
  子文件合并
  INPUT -> 文件目录, 文件名
  '''
  filepath = path+'/'+filename
  partnum = 0
  outputfile = open(filepath, 'wb')
  subfile_list = get_filelist2(FILE_DIR, filename+'_')
  for subfile in subfile_list:
    temp = open(subfile, 'rb')
    outputfile.write(temp.read())
    temp.close()
  outputfile.close()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python开发vim插件及心得分享
Nov 04 Python
Python中http请求方法库汇总
Jan 06 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
浅析Python pandas模块输出每行中间省略号问题
Jul 03 Python
Win8下python3.5.1安装教程
Jul 29 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
Python常用数据类型之间的转换总结
Sep 06 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
cProfile Python性能分析工具使用详解
Jul 22 #Python
python实现大文本文件分割
Jul 22 #Python
python plotly绘制直方图实例详解
Jul 22 #Python
python分割一个文本为多个文本的方法
Jul 22 #Python
在linux系统下安装python librtmp包的实现方法
Jul 22 #Python
django搭建项目配置环境和创建表过程详解
Jul 22 #Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 #Python
You might like
php强制下载类型的实现代码
2011/04/21 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
详解Django通用视图中的函数包装
2015/07/21 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
空指针到底是什么
2012/08/07 面试题
搞笑获奖感言
2014/01/30 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
初三班主任寄语大全
2014/04/04 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
2015年教研员工作总结
2015/05/26 职场文书
企业安全生产规章制度
2015/08/06 职场文书
AJAX学习笔记
2021/05/18 Javascript