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脚本将文字转换为图片的实例分享
Aug 29 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
python实现任意位置文件分割的实例
Dec 14 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
python实现静态服务器
Sep 05 Python
python安装scipy的步骤解析
Sep 28 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
python读取excel数据并且画图的实现示例
Feb 08 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
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
深入探究node之Transform
2017/07/20 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
下载给定网页上图片的方法
2014/02/18 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
200行自定义python异步非阻塞Web框架
2017/03/15 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
比利时家具购买网站:Home24
2019/01/03 全球购物
新教师工作感言
2014/02/16 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
银行贷款委托书范本
2014/10/11 职场文书
会计主管岗位职责
2015/04/02 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
安全第一课观后感
2015/06/18 职场文书
Mysql 用户权限管理实现
2021/05/25 MySQL
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
golang中的struct操作
2021/11/11 Golang