python 解压、复制、删除 文件的实例代码
压缩复制删除文件基于python语言怎么操作呢,压缩文件有四种格式:zip、rar、tar、tar.gz,在压缩过程中也容易出现很多问题,今天小编通过代码给大家详解,具体内容如下所示:
一、python3解压文件
1.python解压文件代码示例
如下代码主要实现zip、rar、tar、tar.gz四种格式的压缩文件的解压
defunzip_file(src_file,dst_dir=None,unzipped_files=None,del_flag=True):
"""
根据指定的压缩文件类型递归解压所有指定类型的压缩文件
:paramsrc_file:解压的源文件路径,可以为文件夹路径也可以是文件路径
:paramdst_dir:解压后的文件存储路径
:paramunzipped_files:完成解压的文件名列表
:paramdel_flag:解压完成后是否删除原压缩文件,默认删除
:return:完成解压的文件名列表
"""
#完成解压的文件名列表初始为空
ifunzipped_filesisNone:
unzipped_files=[]
#指定的解压文件类型
zip_types=['.zip','.rar','.tar','.gz']
defexec_decompress(zip_file,dst_dir):
"""
解压实现的公共代码
:paramzip_file:压缩文件全路径
:paramdst_dir:解压后文件存储路径
:return:
"""
file_suffix=os.path.splitext(zip_file)[1].lower()
try:
print('Startextractingthefile:%s'%zip_file)
#zip解压
iffile_suffix=='.zip':
#zip解压写法一
withZipFile(zip_file,mode='r')aszf:
zf.extractall(dst_dir)
#zip解压写法二
#file_zip=ZipFile(zip_file,mode='r')
#forfileinfile_zip.namelist():
#file_zip.extract(file,dst_dir)
#file_zip.close()
#rar解压
eliffile_suffix=='.rar':
rf=rarfile.RarFile(zip_file)
rf.extractall(dst_dir)
#tar、tgz(tar.gz)解压
eliffile_suffixin['.tar','.gz']:
tf=tarfile.open(zip_file)
tf.extractall(dst_dir)
#关闭文件释放内存
tf.close()
print('Finishedextractingthefile:%s'%zip_file)
exceptExceptionase:
print(e)
#解压完成加入完成列表
unzipped_files.append(zip_file)
#根据标识执行原压缩文件删除
ifdel_flagandos.path.exists(zip_file):
os.remove(zip_file)
#如果传入的文件路径为文件目录,则遍历目录下所有文件
ifos.path.isdir(src_file):
#初始化文件目录下存在的压缩文件集合为空
zip_files=[]
#如果传入的目的文件路径为空,则取解压的原文件夹路径
dst_dir=dst_dirifdst_direlsesrc_file
#遍历目录下所有文件
forfileinos.listdir(src_file):
file_path=os.path.join(src_file,file)
#如果是文件夹则继续递归解压
ifos.path.isdir(file_path):
dst_path=os.path.join(dst_dir,file)
unzip_file(file_path,dst_path,unzipped_files)
#如果是指定类型的压缩文件则加入到压缩文件列表
elifos.path.isfile(file_path)andos.path.splitext(file_path)[
1].lower()inzip_typesandfile_pathnotinunzipped_files:
zip_files.append(file_path)
#遍历压缩文件列表,执行压缩文件的解压
forzip_fileinzip_files:
exec_decompress(zip_file,dst_dir)
#如果当前目录存在压缩文件则完成所有文件解压后继续遍历
ifzip_files:
unzip_file(dst_dir,unzipped_files=unzipped_files)
#如果传入的文件路径是指定类型的压缩文件则直接执行解压
elifos.path.isfile(src_file)andos.path.splitext(src_file)[1].lower()inzip_types:
dst_dir=dst_dirifdst_direlseos.path.dirname(src_file)
exec_decompress(src_file,dst_dir)
returnunzipped_files
2.python解压常见问题解决办法
2.1python3zipfile解压文件名乱码解决办法
直接修改源码,即zipfile.py文件:
第一处:
ifflags&0x800:
#UTF-8filenamesextension
filename=filename.decode('utf-8')
else:
#HistoricalZIPfilenameencoding
#注释原代码
#filename=filename.decode('cp437')
#新加一行代码
filename=filename.decode('gbk')
第二处:
ifzinfo.flag_bits&0x800:
#UTF-8filename
fname_str=fname.decode("utf-8")
else:
#注释原代码
#fname_str=fname.decode("cp437")
#同样新加一行代码
fname_str=fname.decode('gbk')
2.1rar解压无法找到动态库(unrar.dll)解决办法
报错示例:
第一步手动下载动态库文件unrar.dll存在本地目录,例如我的本地存储路径为:C:\MySoft\assist\unrar.dll
链接:https://pan.baidu.com/s/1rqhFND9XmtD1Y8yGLEz9kA提取码:u2my
第二步修改源码unrarlib.py文件
ifplatform.system()=='Windows':
fromctypes.wintypesimportHANDLEasWIN_HANDLE
HANDLE=WIN_HANDLE
UNRARCALLBACK=ctypes.WINFUNCTYPE(ctypes.c_int,ctypes.c_uint,
ctypes.c_long,ctypes.c_long,
ctypes.c_long)
#注释原代码
#lib_path=lib_pathorfind_library("unrar.dll")
#将路径指向下载的动态库文件存储路径
lib_path=r"C:\MySoft\assist\unrar.dll"
iflib_path:
unrarlib=ctypes.WinDLL(lib_path)
知识点扩展:python压缩文件夹的代码
defzip_ya(start_dir): start_dir=start_dir#要压缩的文件夹路径 file_news=start_dir+'.zip'#压缩后文件夹的名字 z=zipfile.ZipFile(file_news,'w',zipfile.ZIP_DEFLATED) fordir_path,dir_names,file_namesinos.walk(start_dir): f_path=dir_path.replace(start_dir,'')#这一句很重要,不replace的话,就从根目录开始复制 f_path=f_pathandf_path+os.sepor''#实现当前文件夹以及包含的所有文件的压缩 forfilenameinfile_names: z.write(os.path.join(dir_path,filename),f_path+filename) z.close() returnfile_news
PS:若递归扫描所有文件夹过程中有文件夹里不存在文件,该文件夹将被忽略
总结
到此这篇关于python解压、复制、删除文件的实例代码的文章就介绍到这了,更多相关python解压、复制、删除文件内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
