文档章节

遍历目录下的文件每250M打包一个文件

寻爱的小草
 寻爱的小草
发布于 07/21 01:15
字数 322
阅读 2
收藏 1
def

#!/usr/bin/env python
# -*- utf-8 -*-
# @Time     : 2018/7/20 0020 下午 10:16
# @Author   : 陈元
# @Email    : abcmeabc@163.com
# @file     : tarFile.py
import os
import tarfile
import threading
import time


class TarFile():

    def __init__(self):
        pass

    #打包多个文件
    def tarFileList(self,fname,flist):
        tar = tarfile.open(fname+'.tar','w')
        for file in flist:
            tar.add(file)
        tar.close()

    def tar(self,fname):
        tar = tarfile.open(fname+'.tar',"w")
        for root,dir,files in os.walk(fname):
            for file in files:
                fpath = os.path.join(root,file)
                tar.add(fpath)
        tar.close()

    def untar(self,fname,dirs):
        tar = tarfile.open(fname)
        tar.extractall(path=dirs)

    def getFileList(self,path):
        start = time.time()
        dirs = os.listdir(path)
        for dir in dirs:
            newPath = os.path.join(path,dir)
            if os.path.isdir(newPath):
                print(dir)
                self.getChildFileList(newPath,dir)

        end = time.time()
        print("all time : {0}".format(end-start))
        pass
    # 递归子目录
    def getChildFileList(self,path,fname):
        dirs = os.listdir(path)
        tFileList = []
        fileNum = 0
        sizeSum = 0
        count = len(dirs)
        thread = []
        for dir in dirs:
            count = count - 1
            newPath = os.path.join(path,dir)
            fname = fname+'_'+dir
            if os.path.isdir(newPath):
                #self.getChildFileList(newPath,fname)
                t = threading.Thread(target=self.getChildFileList,args=(newPath,dir))
                t.start()
                thread.append(t)
            elif os.path.isfile(newPath):
                size = os.path.getsize(newPath)
                sizeSum = sizeSum + size
                sizeM = sizeSum/1024/1024
                if sizeM < 250:
                    tFileList.append(dir)
                elif sizeM >= 250 or count == 0:
                    os.chdir(path)
                    print(path)
                    fileNum = fileNum + 1
                    fname = fname + '_' + str(fileNum)
                    #self.tarFileList(fname,tFileList)
                    # t = threading.Thread(target=self.tarFileList,args=(fname, tFileList))
                    # t.start()
                    # thread.append(t)
                    print(fname)
                    sizeSum = 0
                    del tFileList[:]
                else:
                    print("error... size")
            else:
                print("error...not dir file")

        for t in thread:
            t.join()
        pass

def run():
    pass


def main():
    # try:
        tFile = TarFile()
        tFile.getFileList("V:\\")
    # except :
    #     print("error")
    # pass


if __name__ == '__main__':
    main()
 

© 著作权归作者所有

共有 人打赏支持
寻爱的小草
粉丝 1
博文 94
码字总数 18953
作品 0
广州
运维
IntelliJ IDEA WEB项目的部署配置

1.前言 虽说Intellij IDEA已经用了四个多月,里面大部分功能还是比较熟悉的,但是很多细节地方还是搞不清楚,这几天公司另一个小组也换成了Intellij IDEA,帮他们迁移项目的时候,因为是非m...

BenettX
2014/11/30
0
0
Python实现批量解析PDF文件提取内容并写入到Excel中

摘要:最近需要将一批PDF文件中的某些数据整理到Excel中,因为文件数量接近20w+,手动更新几乎不现实,于是就提取关键词和内容动手写了个Python小工具,以实现自动完成上述目标。 要求: 基本...

_周小董
05/20
0
0
文件(含多级子目录)的打包和解包 C++代码实现

  在公司做项目的时候,有打包和解包文件的需求,而文件为任意类型(eg:txt、exe、dll、jpg、osg、bmp、avi...),刚遇到这个问题,满脑子都是这么多格式的文件仅用打包和解包两个接口如...

才疏学浅、
08/16
0
0
重温webpack:骨架搭建

github 地址 找到skeleton分支 什么是骨架:个人觉得:就是可以简单打包css,js,html,这样的使用场景比较多的是应用在于企业官网的开发。 目标 开发一个官网,你肯定不止一个页面,所以我们需...

饥人谷_林
2017/12/18
0
0
每日一道shell 练习(05)——批量打包文件

1. 习题 找到 /123 目录下所有后缀名为 .txt 的文件 批量修改.txt 为 .txt.bak 把所有.bak 文件打包压缩为 123.tar.gz 批量还原文件的名字,即把增加的.bak 再删除 2. 习题分析 首先要想办法...

hello_cjq
05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【七】组合Action

本章描述了常用定义Action的方法。 自定义action builders 我们在action一章已经看过如何声明一个action——有request parameter、无request parameter、有body parser等等。你可以在 asynch...

Landas
26分钟前
0
0
Spring Boot实战之基础回顾

本文作者: 吴伟祥 本文链接: https://wuweixiang.cn/2018/08/21/Spring-Boot实战之基础回顾/ 版权声明: 本博客所有文章除特别声明外均为原创,采用CC BY-NC-SA 4.0 许可协议。转载请在文章开...

吴伟祥
27分钟前
0
0
OAuth认证开发

提示: 以下测试是基于项目安装成功,初始化数据库(initial_db.ddl, oauth.ddl, initial_data.ddl)后的测试, 也可在页面上点击"client_details"菜单里进行测试 方式1:基于浏览器 (grant_type=...

舒文joven
35分钟前
1
0
第二章-对象及变量的并发访问-第二篇

锁对象的改变 请阅读如下代码 public class MainClass { private String lock = "123"; public void printStringB() { try { synchronized (lock) { ......

简心
39分钟前
0
0
日志中记录代理IP以及真实客户端、apache只记录指定URI的日志

apache 日志中记录代理IP以及真实客户端 默认情况下log日志格式为: LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined 其中%h 是记录访问者的IP,如果在web的前...

李超小牛子
48分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部