python复制、解压zip保留原修改时间

情景:在使用python复制文件或者解压zip文件时,文件的修改时间总是被搞成了当前的执行时间,这样有时会让人挺蛋疼的。

解压并保留原修改时间:

import zipfile

# 发布函数
def deploy():
    # 发布单号
    order_code = sys.argv[1]
    # 解压到当前目录,要包含根目录
    deploy_file_zip = os.path.join(source_path, order_code+".zip")
    f = zipfile.ZipFile(deploy_file_zip,'r')
    #for file in f.namelist():       
     #   f.extract(file,source_path)
    # 获取解压后根目录
    app_root_dir = f.namelist()[0][:-1]
    # 保留原修改时间
    for file in f.infolist():
    	# 先获取原文件的时间
        d = file.date_time
        gettime = "%s/%s/%s %s:%s" % (d[0], d[1], d[2], d[3], d[4])
        # 先解压文件
        f.extract(file, source_path)
        # 获取解压后文件的绝对路径
        filep = os.path.join(source_path, file.filename)
        timearry = time.mktime(time.strptime(gettime, '%Y/%m/%d %H:%M'))
        # 设置解压后的修改时间(这里把修改时间与访问时间设为一样了,windows系统)
        os.utime(filep, (timearry, timearry))
   ..........

复制保留文件原修改时间:

import os
import shutil
from stat import ST_ATIME, ST_CTIME, ST_MTIME

# 合包kcbp_risk
def merge_krisk(souce, dst):
    .....
        for root, dirs, files in os.walk(update_version_root_krisk):
            for f in files:
                # 原文件
                update_file = os.path.join(root, f)
              
                # 复制文件,如果存在就会覆盖,dst_file为复制后文件
                shutil.copy(update_file, dst_file)

                # 关键步骤:保留修改时间,ST_MTIME:修改时间,ST_CTIME:文件访问时间,windows下
                file_stat = os.stat(update_file)
                os.utime(dst_file, (file_stat[ST_CTIME], file_stat[ST_MTIME]))
要批量解压zip文件,Python提供了很多的库,包括zipfile、shutil和os等。下面我介绍一下使用这些库完成批量解压任务的步骤。 1. 导入库 首先需要导入zipfile、os和shutil三个库。zipfile库提供了解压缩包的方法,可以很方便地进行解压操作;os库提供了文件操作的方法,可以获取文件路径和创建文件夹等操作;shutil库提供了复制和移动文件等操作。 ``` import zipfile import os import shutil ``` 2. 定义解压函数 接下来我们需要定义一个函数来完成解压任务。这个函数接收一个zip文件路径和解压路径作为参数。 ``` def unzip_file(zip_path, unzip_path): # 打开zip文件 zip_file = zipfile.ZipFile(zip_path) # 创建解压文件夹 os.makedirs(unzip_path, exist_ok=True) # 遍历压缩包中的文件列表 for names in zip_file.namelist(): # 获取文件的绝对路径 zip_file.extract(names, unzip_path) # 关闭zip文件 zip_file.close() ``` 3. 循环处理zip文件 最后,我们需要使用os库来遍历指定目录下的zip文件。根据文件后缀名为.zip的特征,我们可以使用字符串的.endswith()方法来判断。 ``` # 指定文件夹路径 path = 'path/to/zipfiles' # 循环处理zip文件 for file in os.listdir(path): # 判断文件后缀是否为.zip if file.endswith('.zip'): # 拼接文件路径 file_path = os.path.join(path, file) # 定义解压后的文件夹路径 unzip_path = os.path.join(path, file[:-4]) # 调用函数解压文件 unzip_file(file_path, unzip_path) ``` 这样就完成了批量解压zip文件的任务。大家可以根据自己的需要,对函数进行修改和优化,实现更加灵活和高效的解压方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值