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中的条件判断语句基础学习教程
Feb 07 Python
Python中的heapq模块源码详析
Jan 08 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
python加载自定义词典实例
Dec 06 Python
Python代码块及缓存机制原理详解
Dec 13 Python
Python动态声明变量赋值代码实例
Dec 30 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
Python中zip函数如何使用
Jun 04 Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
Python极值整数的边界探讨分析
Sep 15 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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
在线增减.htpasswd内的用户
2006/10/09 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
php之curl设置超时实例
2014/11/03 PHP
php去掉文件前几行的方法
2015/07/29 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
Python实现远程调用MetaSploit的方法
2014/08/22 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
Python 从attribute到property详解
2020/03/05 Python
匡威德国官网:Converse德国
2019/01/26 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
Python何绘制带有背景色块的折线图
2022/04/23 Python
PHP RabbitMQ消息列队
2022/05/11 PHP
JavaScript实现音乐播放器
2022/08/14 Javascript