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列表与元组详解实例
Nov 01 Python
Python 的 with 语句详解
Jun 13 Python
处理Python中的URLError异常的方法
Apr 30 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
Python 12306抢火车票脚本
Feb 07 Python
python爬取m3u8连接的视频
Feb 28 Python
Python多线程threading模块用法实例分析
May 22 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
python3操作redis实现List列表实例
Aug 04 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文件怎么打开 如何执行php文件
2011/12/21 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
js字符编码函数区别分析
2008/06/05 Javascript
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
Vue computed计算属性的使用方法
2017/07/14 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
Python编程中的反模式实例分析
2014/12/08 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python实现简单的文字识别
2018/11/27 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python线性插值解析
2020/07/05 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
linux面试题参考答案(8)
2015/08/11 面试题
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
平民服装店创业计划书
2014/01/17 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
2014年医院工作总结
2014/11/20 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
python实现手机推送 代码也就10行左右
2022/04/12 Python