我仍然按照python gzip document设置文件时间戳,语法不像gzip.GzipFile(filename=outputfile,mode='wb',compresslevel=9,mtime=ftime),但是当我使用时gzip.GzipFile(outputfile,'wb',9,mtime=ftime),除了时间戳,它可以工作。
def compresse_file(file,ftime):
data = open(file,'rb')
outputfile = file +".gz"
gzip_file = gzip.GzipFile(outputfile,'wb',9,mtime=ftime)
gzip_file.write(data.read())
gzip_file.flush()
gzip_file.close()
data.close()
os.unlink(file)
Run Code Online (Sandbox Code Playgroud)
这是输出:
root@ubuntu:~/PythonPractice-# python compresses_file.py
Size Date File Name
5 MB 30/12/13 test.sh
Compressing...
test.sh 1388403823.0
file status after compressesion
5 kB 31/12/13 test.sh.gz
root@ubuntu:~/PythonPractice-# date -d @1388403823.0
Mon Dec 30 17:13:43 IST 2013
Run Code Online (Sandbox Code Playgroud)
如您在文档中所见,mtime参数是写入流的时间戳,它不影响创建的gzip文件的时间戳。如果使用进行解压缩,这是已解压缩文件的时间戳gunzip -N。
例:
>>> import datetime
>>> import gzip
>>> ts = datetime.datetime(2010, 11, 12, 13, 14).timestamp()
>>> zf = gzip.GzipFile('test.gz', mode='wb', mtime=ts)
>>> zf.write(b'test')
>>> zf.flush()
>>> zf.close()
Run Code Online (Sandbox Code Playgroud)
并解压缩:
>>> import datetime
>>> import gzip
>>> ts = datetime.datetime(2010, 11, 12, 13, 14).timestamp()
>>> zf = gzip.GzipFile('test.gz', mode='wb', mtime=ts)
>>> zf.write(b'test')
>>> zf.flush()
>>> zf.close()
Run Code Online (Sandbox Code Playgroud)
如果希望创建的gzip文件具有特定的时间戳,请使用os.utime进行更改:
...
st = os.stat(file)
...
os.utime(outputfile, (st.st_atime, st.st_mtime))
...
Run Code Online (Sandbox Code Playgroud)