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搭建虚拟环境的步骤详解
Sep 27 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
微信跳一跳自动运行python脚本
Jan 08 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
浅谈python新式类和旧式类区别
Apr 26 Python
numpy求平均值的维度设定的例子
Aug 24 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
Python拼接字符串的7种方式详解
Mar 19 Python
jupyter notebook清除输出方式
Apr 10 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
Feb 18 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实现的九九乘法口诀表简洁版
2014/07/28 PHP
浅析php单例模式
2014/11/25 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
天网面试题
2013/04/07 面试题
建材业务员岗位职责
2013/12/08 职场文书
策划创业计划书
2014/02/06 职场文书
少先队入队活动方案
2014/02/08 职场文书
责任心演讲稿
2014/05/14 职场文书
环保倡议书50字
2014/05/15 职场文书
技术股东合作协议书
2014/12/02 职场文书
教师党员自我评价2015
2015/03/04 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python