python文件拆分与重组实例


Posted in Python onDecember 10, 2018

文件拆分代码:

#-*-encoding:utf-8-*-

 

import os

import sys

import threading

 

def getFileSize(file):

 file.seek(0, os.SEEK_END)

 fileLength = file.tell()

 file.seek(0, 0)

 return fileLength

 

def divideFile():

 fileFullPath = r"%s" % raw_input("File path: ").strip("\"")

 divideTotalPartsCount = int(raw_input("How many parts do you like to divide?: "))

 if os.path.exists(fileFullPath):

  file = open(fileFullPath, 'rb')

  fileSize = getFileSize(file)

  file.close()

  # send file content

  for i in range(divideTotalPartsCount):

   filePartSender = threading.Thread(target=seperateFilePart, args=(fileFullPath, divideTotalPartsCount, i+1, fileSize))

   filePartSender.start()

  

  for i in range(divideTotalPartsCount):

   sem.acquire()

  os.remove(fileFullPath)

 else:

  print "File doesn't exist"

 

def seperateFilePart(fileFullPath, divideTotalPartsCount, threadIndex, fileSize):

 try:

  # calculate start position and end position

  filePartSize = fileSize / divideTotalPartsCount

  startPosition = filePartSize * (threadIndex - 1)

  #print "Thread : %d, startPosition: %d" % (threadIndex, startPosition)

  endPosition = filePartSize * threadIndex - 1

  if threadIndex == divideTotalPartsCount:

   endPosition = fileSize - 1

   filePartSize = fileSize - startPosition

  file = open(fileFullPath, "rb")

  file.seek(startPosition)

  filePartName = fileFullPath + ".part" + str(threadIndex)

  filePart = open(filePartName, "wb")

  lengthWritten = 0

  while lengthWritten < filePartSize:

   bufLen = 1024

   lengthLeft = filePartSize - lengthWritten

   if lengthLeft < 1024:

    bufLen = lengthLeft

   buf = file.read(bufLen)

   filePart.write(buf)

   lengthWritten += len(buf)

  filePart.close()

  file.close()

  sem.release()

  print "Part %d finished, size %d" % (threadIndex, filePartSize)

 except Exception, e:

  print e

 

sem = threading.Semaphore(0)

while True:

 divideFile()

文件重组代码:

#-*-encoding:utf-8-*-

import os

def getFileSize(file):

 file.seek(0, os.SEEK_END)

 fileLength = file.tell()

 file.seek(0, 0)

 return fileLength

 

def rebuildFile():

 fileFullPath = r"%s" % raw_input("File base path: ").strip("\"")

 divideTotalPartsCount = int(raw_input("How many parts have you divided?: "))

 file = open(fileFullPath, "wb")

 for i in range(divideTotalPartsCount):

  filePartName = fileFullPath + ".part" + str(i+1)

  filePart = open(filePartName, "rb")

  filePartSize = getFileSize(filePart)

  lengthWritten = 0

  while lengthWritten < filePartSize:

   bufLen = 1024

   buf = filePart.read(bufLen)

   file.write(buf)

   lengthWritten += len(buf)

  filePart.close()

  os.remove(filePartName)

 file.close()

 

while True:

 rebuildFile()

拆分文件演示:

源文件:

python文件拆分与重组实例

拆分:

python文件拆分与重组实例

拆分后文件:

python文件拆分与重组实例

重组文件:

python文件拆分与重组实例

重组后文件:

python文件拆分与重组实例

以上这篇python文件拆分与重组实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的框架中为MySQL实现restful接口的教程
Apr 08 Python
Python求导数的方法
May 09 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
Python 将pdf转成图片的方法
Apr 23 Python
python3+PyQt5实现文档打印功能
Apr 24 Python
详解python中list的使用
Mar 15 Python
Django重置migrations文件的方法步骤
May 01 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
python内置函数sorted()用法深入分析
Oct 08 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
python实现二分查找算法
Sep 18 Python
Python对excel文档的操作方法详解
Dec 10 #Python
使用python进行拆分大文件的方法
Dec 10 #Python
python使用udp实现聊天器功能
Dec 10 #Python
Python面向对象之类和对象实例详解
Dec 10 #Python
详解Django-auth-ldap 配置方法
Dec 10 #Python
Python网页正文转换语音文件的操作方法
Dec 09 #Python
python 使用 requests 模块发送http请求 的方法
Dec 09 #Python
You might like
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Django中的Model操作表的实现
2018/07/24 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
Python OpenCV实现视频分帧
2019/06/01 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
keras得到每层的系数方式
2020/06/15 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
Overload和Override的区别
2012/09/02 面试题
酒店门卫岗位职责
2013/12/29 职场文书
网络程序员自荐信
2014/01/25 职场文书
中药学自荐信
2014/06/15 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
会计工作能力自我评价
2015/03/05 职场文书
优秀大学生申请书
2019/06/24 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers