python压缩和解压
1、说明
python使用zipfile模块来压缩和解压zip文件
2、代码
importos,os.path
importzipfile
defzip_dir(dirname,zipfilename):
filelist=[]
ifos.path.isfile(dirname):
filelist.append(dirname)
else:
forroot,dirs,filesinos.walk(dirname):
fornameinfiles:
filelist.append(os.path.join(root,name))
zf=zipfile.ZipFile(zipfilename,"w",zipfile.zlib.DEFLATED)
fortarinfilelist:
arcname=tar[len(dirname):]
#printarcname
zf.write(tar,arcname)
zf.close()
defunzip_file(zipfilename,unziptodir):
ifnotos.path.exists(unziptodir):os.mkdir(unziptodir)
zfobj=zipfile.ZipFile(zipfilename)
fornameinzfobj.namelist():
name=name.replace('\','/')
ifname.endswith('/'):
os.mkdir(os.path.join(unziptodir,name))
else:
ext_filename=os.path.join(unziptodir,name)
ext_dir=os.path.dirname(ext_filename)
ifnotos.path.exists(ext_dir):os.mkdir(ext_dir)
outfile=open(ext_filename,'wb')
outfile.write(zfobj.read(name))
outfile.close()
if__name__=='__main__':
zip_dir(r'd:/python/test',r'd:/python/test.zip')
unzip_file(r'd:/python/test.zip',r'd:/python/test2')
执行结果
顺利生成相应文件
3、备注
zip文件格式是通用的文档压缩标准,在zipfile模块中,使用ZipFile类来操作zip文件,下面具体介绍一下:
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,默认值为'r',表示读已经存在的zip文件,也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的zip文档,'a'表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。
ZipFile还提供了如下常用的方法和属性:
ZipFile.getinfo(name):
获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。将在下面 具体介绍该对象。
ZipFile.infolist()
获取zip文档内所有文件的信息,返回一个zipfile.ZipInfo的列表。
ZipFile.namelist()
获取zip文档内所有文件的名称列表。
ZipFile.extract(member[, path[, pwd]])
㈡ Python内置解压缩库:解析与实践
Python内置的解压缩库为处理常见压缩文件提供了方便快捷的方法。本文详细探讨了这些库的使用,包括基础用法、处理不同压缩格式、实际应用案例、性能优化策略和高级功能。
首先,通过zipfile、gzip和tarfile库,可以轻松实现对ZIP、GZIP和TAR文件的解压缩与压缩。基础用法示例清晰展示了文件的解压、压缩以及内容遍历。
Python支持多种压缩格式,每种格式有其特点和使用场景。ZIP文件常用于打包多个文件,GZIP用于单个文件压缩,TAR文件则用于多个文件的打包与压缩。掌握这些格式的处理方法,有助于根据需求选择合适的解压缩方式。
在实际应用中,Python内置库在项目中发挥重要作用。解析日志文件、处理数据集压缩文件等场景,展示了库在处理复杂文件结构和执行特定操作时的优势。
性能优化考虑在处理大型文件时尤为重要。通过合理使用缓冲区、选择高效解压缩方式和并行处理策略,可以显着提高性能。讨论的性能优化策略有助于在实际项目中实现高效解压缩。
深入探讨Python解压缩库的高级功能,如自定义解压路径、处理密码保护文件等,提供了更多定制化选择,使库适应不同需求。
实际应用案例展示了库的广泛使用,包括处理包含多个目录的压缩文件以及在解压缩过程中执行特定操作。这些案例展示了库在复杂文件结构处理和执行特定操作方面的优势。
在使用过程中,应关注异常处理和文件路径注意事项,确保代码鲁棒性。这在处理各种来源和质量的压缩文件时尤为重要。
总结而言,Python内置解压缩库是强大而灵活的工具,适用于日常开发、数据科学和项目管理等多个场景。掌握库的基础用法、高级功能和性能优化策略,可显着提高文件处理效率,为项目提供有力支持。同时,库的注意事项与错误处理机制确保了代码的鲁棒性,使其成为值得深入学习和掌握的工具之一。
㈢ 下载python然后有一堆文件要解压
python一堆文件解压方法如下。
压缩包解压要用的是zipfile这个包。
zip_file = zipfile.ZipFile(r'D:数据源XX_%s.zip'%yday)
zip_list = zip_file.namelist() # 压缩文件清单,可以直接看到压缩包内的各个文件的明细
for f in zip_list: # 遍历这些文件,逐个解压出来,
zip_file.extract(f,r'D:数据源')
zip_file.close() # 不能少!
print('昨日日志解压完成,请在文件夹中验收!') # 当然我是不需要查收的(*/ω\*)
这里的解压操作实际就相当于鼠标右键“解压到当前文件夹”的效果。
完成解压后运行.close()是个比较好的习惯,否则可能会导致包括但不限于:
文件会一直被占用着,可能无法重新打开;
在进程结束之前文件都删不掉;
文件内容不能即时 flush 到磁盘直到进程结束;
到此,整个流程在无需打开浏览器和文件夹的情况下便自动完成了。
为了方便日常运行代码,这里把上面的两个流程包装成一个函数,下载解压
#下载昨日日志
def download_XXlog():
yday = (date.today()+timedelta(days=-1)).strftime('%Y%m%d') # 获取昨日日期
r = requests.get('http://XXXXXXXX/XX_%s.zip'%yday) # 获取以日期命名的压缩包信息
with open(r'D:数据源XX_%s.zip'%yday,'wb') as code: # 将压缩包内容写入到 "D:数据源" 下,并按日期命名
code.write(r.content)
print('昨日XX日志下载完成。')
zip_file = zipfile.ZipFile(r'D:数据源XX_%s.zip'%yday)
zip_list = zip_file.namelist() # 压缩文件清单,可以直接看到压缩包内的各个文件的明细
for f in zip_list: # 遍历这些文件,逐个解压出来,
zip_file.extract(f,r'D:数据源')
zip_file.close() # 不能少!
print('昨日日志解压完成,请在文件夹中验收!')
download_XXlog()
拓展
作为拓展,这里再加一个可以根据实际情况输入(input)起始和终止日期,来下载一个特定时间段日志的函数,这里就涉及了datetime和time这两个工具包了。