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实现图片批量剪切示例
Mar 25 Python
Python import自定义模块方法
Feb 12 Python
Django接受前端数据的几种方法总结
Nov 04 Python
浅析python的优势和不足之处
Nov 20 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
python函数map()和partial()的知识点总结
May 26 Python
Python with语句用法原理详解
Jul 03 Python
Matlab中plot基本用法的具体使用
Jul 17 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使之能同时支持GIF和JPEG
2006/10/09 PHP
PHP页面中文乱码分析
2013/10/29 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
Python判断操作系统类型代码分享
2014/11/22 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
windows下python安装小白入门教程
2018/09/18 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
能源工程专业应届生求职信
2014/03/01 职场文书
开服装店计划书
2014/08/15 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
焦点访谈观后感
2015/06/11 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL