对文件进行解压缩是我们日常工作中最平常不过的行为了,压缩过的文件不仅可以节省磁盘空间,而且在网络传输中也可以节省不少时间。
Python为我们提供了zipfile模块,这使得我们可以十分方便地对文件进行解压缩操作,而且代码书写也十分简单:
对文件进行压缩:
from zipfile import ZipFile
import os
def get_all_file_paths(directory):
file_paths = []
# 把所有的文件夹以及子文件夹、以及文件全部搞出来
for root, directories, files in os.walk(directory):
for filename in files:
# 得到完全路径
filepath = os.path.join(root, filename)
file_paths.append(filepath)
return file_paths
def main():
directory = './Junit'
file_paths = get_all_file_paths(directory)
print('Following files will be zipped:')
for file_name in file_paths:
print(file_name)
with ZipFile('my_python_files.zip', 'w') as zip:
for file in file_paths:
zip.write(file)
print('All files zipped successfully!')
if __name__ == "__main__":
main()
输出:
Following files will be zipped:
./Junit\hamcrest-core-1.3.jar
./Junit\junit-4.11-javadoc.jar
./Junit\junit-4.11-sources.jar
./Junit\junit-4.11.jar
./Junit\junit-4.7.jar
All files zipped successfully!
不过这个算法的压缩率貌似不是很高,至少在这个文件上跟360比还是差100KB。
对压缩文件进行解压:
from zipfile import ZipFile
file_name = "Junit 4.11.zip"
with ZipFile(file_name, 'r') as zip:
# printing all the contents of the zip file
zip.printdir()
print('Extracting all the files now...')
zip.extractall()
print('Done!')
输出:
File Name Modified Size
Junit/ 2013-04-22 20:51:10 0
Junit/hamcrest-core-1.3.jar 2013-04-22 19:04:48 45024
Junit/junit-4.11-javadoc.jar 2013-04-22 19:04:00 379344
Junit/junit-4.11-sources.jar 2013-04-22 19:03:42 151329
Junit/junit-4.11.jar 2013-04-22 19:03:32 245039
Junit/junit-4.7.jar 2013-04-22 19:04:00 232354
Extracting all the files now...
Done!