Python实现多级目录压缩与解压文件的方法
在Python中,可以使用zipfile
模块实现多级目录的压缩和解压缩,该模块提供了一种方便灵活的处理ZIP格式文件的方法。
压缩文件
下面是使用Python实现多级目录压缩文件的代码示例:
import zipfile
import os
def zip_dir(dirname, zipfilename):
filelist = []
if os.path.isfile(dirname):
filelist.append(dirname)
else:
for root, dirs, files in os.walk(dirname):
for name in files:
filelist.append(os.path.join(root, name))
zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
zf.write(tar, arcname)
zf.close()
if __name__ == '__main__':
zip_dir('/root/demo', 'demo.zip')
上面的代码中,zipfile
模块中的ZipFile
方法用于创建ZIP文件,os.walk
函数用于遍历目录下的文件和子目录,zf.write
方法将文件添加到ZIP文件中。
在运行上面的代码之后,会在当前目录下生成一个名为demo.zip
的ZIP文件,该文件包含了/root/demo
目录下的所有文件和子目录。
解压文件
下面是使用Python实现多级目录解压文件的代码示例:
import zipfile
import os
def unzip_file(zipfilename, unziptodir):
if not os.path.exists(unziptodir): os.mkdir(unziptodir, 0777)
zfobj = zipfile.ZipFile(zipfilename)
for name in zfobj.namelist():
name = name.replace('\\', '/')
if name.endswith('/'):
os.mkdir(os.path.join(unziptodir, name))
else:
ext_filename = os.path.join(unziptodir, name)
ext_dir= os.path.dirname(ext_filename)
if not os.path.exists(ext_dir) : os.mkdir(ext_dir,0777)
outfile = open(ext_filename, 'wb')
outfile.write(zfobj.read(name))
outfile.close()
if __name__ == '__main__':
unzip_file('demo.zip', '/root/demo_unzip')
上面的代码中,zipfile
模块中的ZipFile
方法用于打开ZIP文件,zfobj.namelist()
方法用于获取ZIP文件中的所有文件列表,os.mkdir
函数用于创建目录,os.path.dirname
函数用于获取文件路径,outfile.write
方法用于将ZIP文件中的文件写入到目录中。
在运行上面的代码之后,会在当前目录下创建一个名为/root/demo_unzip
的目录,并将demo.zip
解压到该目录中。
示例说明
假设当前目录下有以下目录结构:
./root/demo/
├── config.ini
├── data
│ ├── data1.txt
│ └── data2.txt
└── log
└── log.txt
使用上面的压缩代码示例,可以将整个/root/demo
目录压缩为名为demo.zip
的ZIP文件。
使用上面的解压代码示例,在当前目录下创建一个名为/root/demo_unzip
的目录,并将demo.zip
解压到该目录中,生成和原目录结构一致的文件和目录。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现多级目录压缩与解压文件的方法 - Python技术站