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读写excel的方法
Nov 18 Python
python使用append合并两个数组的方法
Apr 28 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
Python SQLite3简介
Feb 22 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
python binascii 进制转换实例
Jun 12 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
python3使用GUI统计代码量
Sep 18 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
python中子类与父类的关系基础知识点
Feb 02 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
Python编程编写完善的命令行工具
Sep 15 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中使用imagick实现把PDF转成图片
2015/01/26 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python3去掉string中的标点符号方法
2019/01/22 Python
python贪吃蛇游戏代码
2020/04/18 Python
python解析xml简单示例
2019/06/21 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
解决python 找不到module的问题
2020/02/12 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
AmazeUI 网格的实现示例
2020/08/13 HTML / CSS
电子商务个人自荐信
2013/12/12 职场文书
趣味游戏活动方案
2014/02/07 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
实习单位鉴定评语
2014/04/26 职场文书
学校政风行风整改方案
2014/10/25 职场文书
庆七一活动简报
2015/07/20 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
DE1103使用报告
2022/04/05 无线电