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开发之for循环操作实例详解
Nov 12 Python
python基础之入门必看操作
Jul 26 Python
python处理Excel xlrd的简单使用
Sep 12 Python
python清除字符串中间空格的实例讲解
May 11 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
python 获取等间隔的数组实例
Jul 04 Python
超实用的 30 段 Python 案例
Oct 10 Python
解决python 上传图片限制格式问题
Oct 30 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
python之随机数函数的实现示例
Dec 30 Python
python中四舍五入的正确打开方式
Jan 18 Python
python如何读取.mtx文件
Apr 22 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
漂亮但不安全的CTB
2006/10/09 PHP
推荐一篇入门级的Class文章
2007/03/19 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
ini_set的用法介绍
2014/01/07 PHP
PHP中文乱码解决方案
2015/03/05 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
JavaScript delete 属性的使用
2009/10/08 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
jQuery.form.js的使用详解
2017/06/14 jQuery
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
vue组件tabbar使用方法详解
2018/11/06 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
python在协程中增加任务实例操作
2021/02/28 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
土建专业大学生自荐信范文
2014/04/09 职场文书
我的长征观后感
2015/06/09 职场文书
关于环保的宣传稿
2015/07/23 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
教你一步步实现一个简易promise
2021/11/02 Javascript