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的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 Python
Python从零开始创建区块链
Mar 06 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
如何获取Python简单for循环索引
Nov 21 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
如何通过Django使用本地css/js文件
Jan 20 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
Python接口自动化测试框架运行原理及流程
Nov 30 Python
Python中的套接字编程是什么?
Jun 21 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&amp;mysql(二)
2006/10/09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
类的返射机制中的包及核心类
2016/09/12 面试题
餐饮收银员岗位职责
2014/02/07 职场文书
幸福家庭标语
2014/06/27 职场文书
小学生植树节活动总结
2014/07/04 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
2014年采购部工作总结
2014/11/20 职场文书
酒店前台辞职书
2015/02/26 职场文书
PHP新手指南
2021/04/01 PHP
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS
Redis高可用集群redis-cluster详解
2022/03/20 Redis
python读取mat文件生成h5文件的实现
2022/07/15 Python