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学习笔记 下载
Feb 10 Python
Python解析最简单的验证码
Jan 07 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
Python安装lz4-0.10.1遇到的坑
May 20 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
Python基础学习之函数方法实例详解
Jun 18 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
Python torch.flatten()函数案例详解
Aug 30 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/07/14 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
PHP实现的日历功能示例
2018/09/01 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
js 判断 enter 事件
2009/02/12 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
python实现将内容分行输出
2015/11/05 Python
Python占用的内存优化教程
2019/07/28 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
历史专业个人求职信分享
2013/12/20 职场文书
简历自我评价怎么写呢?
2014/01/06 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
感恩节活动策划方案
2014/05/16 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
见习期个人总结
2015/03/05 职场文书
react antd实现动态增减表单
2021/06/03 Javascript
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏