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模拟鼠标拖动操作的方法
Mar 11 Python
SQLite3中文编码 Python的实现
Jan 11 Python
Python中的id()函数指的什么
Oct 17 Python
python交互式图形编程实例(一)
Nov 17 Python
Python安装lz4-0.10.1遇到的坑
May 20 Python
Sanic框架路由用法实例分析
Jul 16 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
python 多线程死锁问题的解决方案
Aug 25 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 Python
numpy实现RNN原理实现
Mar 02 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文件中bom的PHP代码
2012/03/13 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
javascript 常用方法总结
2009/06/03 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
微信小程序实现无限滚动列表
2020/05/29 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
委托证明的格式
2014/01/10 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
意向协议书
2015/01/27 职场文书
2016年端午节寄语
2015/12/04 职场文书
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js