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图片裁剪实例代码(如头像裁剪)
Jun 21 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
Django开发中复选框用法示例
Mar 20 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
对python3新增的byte类型详解
Dec 04 Python
python输出决策树图形的例子
Aug 09 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
简单了解Python变量作用域正确使用方法
Jun 12 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
python通配符之glob模块的使用详解
Apr 24 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生成随机密码的几种方法
2011/01/17 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
js关于字符长度限制的问题示例探讨
2014/01/24 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
Python写的英文字符大小写转换代码示例
2015/03/06 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
python3对接mysql数据库实例详解
2019/04/30 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
彻底解决Python包下载慢问题
2020/11/15 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
物流管理毕业生自荐信范文
2014/03/15 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
机械机修工岗位职责
2014/08/03 职场文书
安全例会汇报材料
2014/08/23 职场文书
工作年限证明模板
2014/11/01 职场文书
四年级数学教学反思
2016/02/16 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书