ZipFile解压文件不改变压缩包内文件修改日期的方法

本文参考http://stackoverflow.com/questions/9813243/extract-files-from-zip-file-and-retain-mod-date-python-2-7-1-on-windows-7

 1 import os
 2 import time
 3 from zipfile import ZipFile
 4
 5 zf = ZipFile(‘archive.zip‘, ‘r‘)
 6 for zi in zf.infolist():
 7     zf.extract(zi)
 8     date_time = time.mktime(zi.date_time + (0, 0, -1))
 9     os.utime(zi.filename, (date_time, date_time))
10 zf.close()

time.mktime()函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象或一个完整的9位元组作为参数,返回用秒数来表示时间的浮点数。

Index Attribute Values
0 tm_year (for example, 1993)
1 tm_mon range [1, 12]
2 tm_mday range [1, 31]
3 tm_hour range [0, 23]
4 tm_min range [0, 59]
5 tm_sec range [0, 61]; see (2) in strftime() description
6 tm_wday range [0, 6], Monday is 0
7 tm_yday range [1, 366]
8 tm_isdst 0, 1 or -1; see below

上述代码第8行就是构造该元组,(0, 0, -1)分别表示tm_wday,tm_yday,tm_isdst(-1表示夏令时未知)

os.utime(path,(atime, mtime)):将文件的访问和修改时间设为指定值(第二个参数是一个包含两个元素的元组)。

时间: 2024-10-31 21:26:55

ZipFile解压文件不改变压缩包内文件修改日期的方法的相关文章

通过zipfile解压指定目录下的zip文件

代码: # -*- coding: utf-8 -*- import os import zipfile import platform import multiprocessing # 解压后的文件夹与原来的zip文件同名且在相同目录下 # 确保windows下解压后的文件夹名不乱码 file_encoding = "utf-8" if platform.system() == "Windows": file_encoding = "gbk"

C#ZIP根据路径读取压缩包内文件数量

/// <summary> /// 根据压缩包路径读取此压缩包内文件个数 /// </summary> /// <param name="strAimPath"></param> /// <returns></returns> private int FileInZipCount(string strAimPath) { ZipEntry zipEntry_ = null; FileStream fsFile_ =

对比两个压缩包内文件,将不同的文件及文件夹单独移到一个新文件夹里

项目需要,要对比两个apk,看是否有新增文件,并列出. 个人写这个写了有段时间,如果不跟业务结合的话可能就不会写这么久了(感慨下,还是单纯的逻辑代码简单啊!) 上代码 private String testFile(String path1,String unzipPath1,String path2,String unzipPath2,String newUnzipPath) throws Exception{ long l = System.currentTimeMillis(); //将压

python笨办法解决zipfile解压会改变文件最后修改时间的问题

# -*- coding=gbk -*- import zipfile def UnZip(path, patht):     #path 为需要解压的文件路径,patht为解压的目标目录     f = zipfile.ZipFile(path, 'r')     print "开始解压文件..."     for file in f.namelist():         print "正在解压文件:%s to %s" %(file, patht)       

Ubuntu下压缩包内文件解压后乱码问题的解决

用到的工具是The Unarchiver项目提供的lsar/unar工具. The Unarchiver项目主页:http://code.google.com/p/theunarchiver/ 安装(12.04及以上): 代码: sudo apt-get install unar 12.04下面或者想编译安装的朋友请參考: viewtopic.php?f=35&t=353426 使用: 如果须要解压的ZIP包是foo.zip 代码: lsar foo.zip #列出全部文件 假设列出的文件名称已

Java解压上传zip或rar文件,并解压遍历文件中的html的路径

1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute(Constant.USER_SESSION_KEY); String realName = user.getRealName(); System.out.println("--------获取登录用户信

zipfile 解压文件名 中文字符 乱码

unzip 中文文件名乱码 上传文件功能模块需求及BUG现象: 上传一个.zip格式的压缩文件 解压该test.zip压缩文件 解压zip文件时,遍历其目录下所有子文件,同时计算出单个子文件的有效代码行数 这时,发现解压后的子文件名中文出现乱码,如下图: BUG截图 解决思路 1.解压过程中,发现解压的文件内容正常: 2.使用的是第三方库zipfile模块,因为第1步得到正常的文件内容,本地业务逻辑可先不排查: 3.首先检查zipfile的源码中,针对编码/解码的执行过程仔细排查发现: zipf

tar包解压后用户名改变

最近开发项目时在PC上wang用户及组下打包的tar包解压到嵌入式设备root用户下,文件目录及文件用户名改为dbus和dbus组,导致cron等应用异常. 出现此问题时可以通过修改相应文件(件)的用户和用户组,但不通用. 理想的方法是tar包解压时不保留用户信息,通过tar --help可知晓: tar --no-same-owner -zxvf xxx.tar.gz -C / 至于为什么用户名改为dbus,应该和用户ID有关,在PC上wang的用户ID和嵌入式设备上dbus的用户ID相同,此

tar命令解压、压缩gz/bz2/xz文件

1.处理.tar.gz 压缩:tar zcf FILE.tar.gz FILEDIR 解压:tar zxf FILE.tar.gz 2.处理.tar.bz2 压缩:tar jcf FILE.tar.bz2 FILEDIR 解压:tar jxf FILE.tar.bz2 3.处理.tar.xz 压缩:tar Jcf FILE.tar.xz FILEDIR 解压:tar Jxf FILE.tar.xz