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通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
python socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
Nov 02 Python
python高阶爬虫实战分析
Jul 29 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
python文字转语音的实例代码分析
Nov 12 Python
解决torch.autograd.backward中的参数问题
Jan 07 Python
pytorch梯度剪裁方式
Feb 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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php后门URL的防范
2013/11/12 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
javascript中的缓动效果实现程序
2012/12/29 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
在vscode中配置python环境过程解析
2019/09/28 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
质量工程师岗位职责
2013/11/16 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
2014年服务员工作总结
2014/11/18 职场文书
可可西里观后感
2015/06/08 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
爱国主题班会教案
2015/08/14 职场文书
浅析Django接口版本控制
2021/06/26 Python