编程记录——python拷贝文件(夹)到指定位置并压缩

#-*- coding:gbk -*-

import os
import sys
import shutil
import zipfile

abspath = os.path.abspath(os.path.dirname(sys.argv[0]))
extract_file_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]),'extract-files-config.txt'))

def copyfiles(desdir, filename, patchname):

    with open(extract_file_path, 'r', encoding='utf-8') as filecfg:
        for line in filecfg:
            srcpath = filename + line.strip()
            if os.path.isfile(srcpath):
                if srcpath.find('README') == -1: #非README文件照原来路径存放
                    filepath = os.path.dirname(line)

                    despath = desdir + '\\' + patchname + '\\' + filepath
                    if not os.path.isdir(despath): #路径不存在则创建文件夹路径
                        os.makedirs(despath)
                    shutil.copy(srcpath, despath)
                else:                            #README文件存放文件第一级目录下
                    despath = desdir + '\\' + patchname
                    if not os.path.isdir(despath):
                        os.makedirs(despath)
                    shutil.copy(srcpath, despath)

def zippingfile(currentpath, patchname):

    zipname = currentpath + '\\' + patchname + '.zip'
    z = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED)
    startdir = currentpath + '\\' + patchname
    for dirpath, dirnames, filenames in os.walk(startdir):
        fpath = dirpath.replace(startdir, '') #这一句很重要,不replace的话,就从根目录开始复制,且replace中的startdir不能写成dirpath,否则所有文件在压缩包内不再具有原目录结构而是都在第一级目录下
        fpath = fpath and fpath + os.sep or '' #这句话不理解
        for filename in filenames:
            z.write(os.path.join(dirpath, filename), os.path.join(fpath, filename))
    z.close()

if __name__ == '__main__':
    filename = abspath + '\\..\\..\\..\\'
    desdir = 'e:\\123'
    patchname = '321'

    copyfiles(desdir, filename, patchname) #从需要抽取的文件配置.txt中找到文件并拷贝到指定位置,包括文件夹结构
    zippingfile(desdir, patchname) #对抽取完的文件夹进行打包.zip

从指定文件配置中找到文件copy到指定目录并完成打包.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值