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 logging模块学习笔记
May 24 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
python保存文件方法小结
Jul 27 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
python中的Elasticsearch操作汇总
Oct 30 Python
Python模块_PyLibTiff读取tif文件的实例
Jan 13 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
图神经网络GNN算法
May 11 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+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
php将html转为图片的实现方法
2017/05/19 PHP
PHP asXML()函数讲解
2019/02/03 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
详解js 创建对象的几种方法
2019/03/08 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
Python线程的两种编程方式
2015/04/14 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
会计人员岗位职责
2015/02/03 职场文书
护林员个人总结
2015/03/04 职场文书
放牛班的春天观后感
2015/06/01 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书