一、python3解压文件

1.python 解压文件代码示例

如下代码主要实现zip、rar、tar、tar.gz四种格式的压缩文件的解压

  1.  
  1. import os
    import zipfile
    import tarfile
    from zipfile import ZipFile
    from unrar import rarfile
  1. def unzip_file(src_file, dst_dir=None, unzipped_files=None, del_flag=True):
  2. """
  3. 根据指定的压缩文件类型递归解压所有指定类型的压缩文件
  4. :param src_file: 解压的源文件路径,可以为文件夹路径也可以是文件路径
  5. :param dst_dir: 解压后的文件存储路径
  6. :param unzipped_files: 完成解压的文件名列表
  7. :param del_flag: 解压完成后是否删除原压缩文件,默认删除
  8. :return: 完成解压的文件名列表
  9. """
  10. # 完成解压的文件名列表初始为空
  11. if unzipped_files is None:
  12. unzipped_files = []
  13. # 指定的解压文件类型
  14. zip_types = ['.zip', '.rar', '.tar', '.gz']
  15.  
  16. def exec_decompress(zip_file, dst_dir):
  17. """
  18. 解压实现的公共代码
  19. :param zip_file: 压缩文件全路径
  20. :param dst_dir: 解压后文件存储路径
  21. :return:
  22. """
  23. file_suffix = os.path.splitext(zip_file)[1].lower()
  24. try:
  25. print('Start extracting the file: %s' % zip_file)
  26.  
  27. # zip 解压
  28. if file_suffix == '.zip':
  29. # zip解压 写法一
  30. with ZipFile(zip_file, mode='r') as zf:
  31. zf.extractall(dst_dir)
  32. # zip解压 写法二
  33. # file_zip = ZipFile(zip_file, mode='r')
  34. # for file in file_zip.namelist():
  35. # file_zip.extract(file, dst_dir)
  36. # file_zip.close()
  37.  
  38. # rar 解压
  39. elif file_suffix == '.rar':
  40. rf = rarfile.RarFile(zip_file)
  41. rf.extractall(dst_dir)
  42.  
  43. # tar、tgz(tar.gz) 解压
  44. elif file_suffix in ['.tar', '.gz']:
  45. tf = tarfile.open(zip_file)
  46. tf.extractall(dst_dir)
  47. # 关闭文件释放内存
  48. tf.close()
  49.  
  50. print('Finished extracting the file: %s' % zip_file)
  51. except Exception as e:
  52. print(e)
  53. # 解压完成加入完成列表
  54. unzipped_files.append(zip_file)
  55. # 根据标识执行原压缩文件删除
  56. if del_flag and os.path.exists(zip_file):
  57. os.remove(zip_file)
  58.  
  59. # 如果传入的文件路径为文件目录,则遍历目录下所有文件
  60. if os.path.isdir(src_file):
  61. # 初始化文件目录下存在的压缩文件集合为空
  62. zip_files = []
  63. # 如果传入的目的文件路径为空,则取解压的原文件夹路径
  64. dst_dir = dst_dir if dst_dir else src_file
  65. # 遍历目录下所有文件
  66. for file in os.listdir(src_file):
  67. file_path = os.path.join(src_file, file)
  68. # 如果是文件夹则继续递归解压
  69. if os.path.isdir(file_path):
  70. dst_path = os.path.join(dst_dir, file)
  71. unzip_file(file_path, dst_path, unzipped_files)
  72. # 如果是指定类型的压缩文件则加入到压缩文件列表
  73. elif os.path.isfile(file_path) and os.path.splitext(file_path)[
  74. 1].lower() in zip_types and file_path not in unzipped_files:
  75. zip_files.append(file_path)
  76. # 遍历压缩文件列表,执行压缩文件的解压
  77. for zip_file in zip_files:
  78. exec_decompress(zip_file, dst_dir)
  79. # 如果当前目录存在压缩文件则完成所有文件解压后继续遍历
  80. if zip_files:
  81. unzip_file(dst_dir, unzipped_files=unzipped_files)
  82. # 如果传入的文件路径是指定类型的压缩文件则直接执行解压
  83. elif os.path.isfile(src_file) and os.path.splitext(src_file)[1].lower() in zip_types:
  84. dst_dir = dst_dir if dst_dir else os.path.dirname(src_file)
  85. exec_decompress(src_file, dst_dir)
  86.  
  87. return unzipped_files

2.python解压常见问题解决办法

2.1 python3 zipfile解压文件名乱码解决办法

直接修改源码,即 zipfile.py 文件:

第一处:

  1. if flags & 0x800:
  2. # UTF-8 file names extension
  3. filename = filename.decode('utf-8')
  4. else:
  5. # Historical ZIP filename encoding
  6. # 注释原代码
  7. # filename = filename.decode('cp437')
  8. # 新加一行代码
  9. filename = filename.decode('gbk')

第二处:

  1. if zinfo.flag_bits & 0x800:
  2. # UTF-8 filename
  3. fname_str = fname.decode("utf-8")
  4. else:
  5. # 注释原代码
  6. # fname_str = fname.decode("cp437")
  7. # 同样新加一行代码
  8. fname_str = fname.decode('gbk')

2.1 rar 解压无法找到动态库(unrar.dll)解决办法

报错示例:

第一步 手动下载动态库文件 unrar.dll 存在本地目录,例如我的本地存储路径为:C:\MySoft\assist\unrar.dll

链接:https://pan.baidu.com/s/1LiZXEaDDuekYtRqF8zFMxw  提取码:kxld

第二步 修改源码 unrarlib.py 文件

  1. if platform.system() == 'Windows':
  2. from ctypes.wintypes import HANDLE as WIN_HANDLE
  3. HANDLE = WIN_HANDLE
  4. UNRARCALLBACK = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_uint,
  5. ctypes.c_long, ctypes.c_long,
  6. ctypes.c_long)
  7. # 注释原代码
  8. # lib_path = lib_path or find_library("unrar.dll")
  9. # 将路径指向下载的动态库文件存储路径
  10. lib_path = r"C:\MySoft\assist\unrar.dll"
  11. if lib_path:
  12. unrarlib = ctypes.WinDLL(lib_path)

二、python文件复制

  1. import os
  2. import shutil
  3.  
  4. def move_or_copy_file(srcpath, dstpath, flag='COPY'):
  5. """
  6. 复制或剪切指定文件到指定目录
  7. :param srcfile: 操作的源文件路径
  8. :param dstfile: 操作文件目标存储路径
  9. :param flag: 执行的操作类型复制或剪切,默认为复制操作
  10. :return: 执行结果,1 为成功,0 为失败
  11. """
  12.  
  13. def exec_action(srcfile, dstfile, flag='COPY'):
  14. # 增加指定路径下的操作权限
  15. # os.chmod(srcfile, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
  16. try:
  17. if 'MOVE' == flag:
  18. shutil.move(srcfile, dstfile)
  19. print("Finished moving %s -> %s" % (srcfile, dstfile))
  20. return 1
  21. else:
  22. shutil.copy(srcfile, dstfile)
  23. print("Finished copying %s -> %s" % (srcfile, dstfile))
  24. return 1
  25. except Exception as e:
  26. print(e)
  27. return 0
  28.  
  29. result = 1
  30. if not os.path.exists(dstpath):
  31. os.makedirs(dstpath)
  32. if os.path.isfile(srcpath):
  33. result = exec_action(srcpath, dstpath, flag)
  34. elif os.path.isdir(srcpath):
  35. for root, dirs, files in os.walk(srcpath):
  36. for dir in dirs:
  37. src_dir_path = os.path.join(root, dir)
  38. dst_dir_path = src_dir_path.replace(srcpath, dstpath)
  39. if not os.path.exists(dst_dir_path):
  40. os.makedirs(dst_dir_path)
  41. for file in files:
  42. if "desktop.ini" != file:
  43. src_file_path = os.path.join(root, file)
  44. dst_file_path = src_file_path.replace(srcpath, dstpath)
  45. result = exec_action(src_file_path, dst_file_path, flag)
  46. if not result:
  47. return result
  48. else:
  49. print("The source file: %s does not exist" % srcpath)
  50. result = 0
  51. return result

python 解压、复制、删除 文件的更多相关文章

  1. C# 压缩 解压 复制文件夹,文件的操作

    命名空间:namespace System.IO.Compression 压缩: //目标文件夹 string fileDirPath = "/Downloads/试题" + us ...

  2. 使用Python解压zip、rar文件

    解压 zip 文件 基本解压操作 import zipfile ''' 基本格式:zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]]) ...

  3. python项目1:自动解压并删除压缩包

    目的:实现压缩包的自动解压及删除. 思路:获取压缩包 > 解压 > 删除压缩包 代码实现:此处代码实现前提为.py文件和压缩包在同一文件夹 # 导入需要的包 import os impor ...

  4. python用模块zlib压缩与解压字符串和文件的方法

    摘自:http://www.jb51.net/article/100218.htm Python标准模块中,有多个模块用于数据的压缩与解压缩,如zipfile,gzip, bz2等等. python中 ...

  5. python-----自动解压并删除zip文件

    如何自动解压并删除zip? 如何解压  →  使用内置模块来实现(shutil.unpack_archive) 如何删除zip  →  使用内置模块os来实现(os.remove) 如何监测zip的出 ...

  6. tar命令: 解压到指定的目录, 解压并删除原tar文件

    -f: 置顶文件名, 后面不能再跟其他选项字母了,必须是文件名, 但是再在这个后面又可以跟 -? 选项: -C: 指定解压到的目的目录 不是-c, 小写的-c是创建. -p保留原来文件的属性. tar ...

  7. python 解压 压缩包

    转 http://m.blog.csdn.net/blog/wice110956/26597179# 这里讨论使用Python解压如下五种压缩文件: .gz .tar  .tgz .zip .rar ...

  8. python解压压缩包的几种方法

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar  .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. ...

  9. Python解压ZIP、RAR等常用压缩格式的方法

    解压大杀器 首先祭出可以应对多种压缩包格式的python库:patool.如果平时只用基本的解压.打包等操作,也不想详细了解各种压缩格式对应的python库,patool应该是个不错的选择. pato ...

随机推荐

  1. electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  2. 异数OS-星星之火(二)--远程实验室注册开放

    异数OS-星星之火(二) 远程实验室注册开放 异数os-织梦师云 未来操作系统技术远程实验室预计9月中旬开放,提供异数os用户学习研究测试服务,目前在做容器化多租户环境改造,先开放会员预注册通道,有需 ...

  3. .NET Core验证ASP.NET密码

    .NET Core验证ASP.NET密码 随着.NET Core的持续更新和完善,越来越多的机构已经选择或者升级为.NET Core.但由于技术不完全相同,不可能所有应用/数据库都能无缝迁移,因此AS ...

  4. Collections中的常用方法

    collections中的常用方法 public class CollectionsTest { public static void main(String[] args) { List list ...

  5. GP工作室——系统设计

    团队作业第二次--系统设计 问题 答案 这个作业属于哪个课程 软件工程 这个作业要求在哪里 作业要求 团队名称 GP工作室 这个作业的目标 对项目软件进行更为详细的系统性设计 按照本游戏的设计要求,我 ...

  6. 龙芯2f 8089D 笔记本 Debian 系统安装配置

    版权声明:原创文章,未经博主允许不得转载 正文主要讲述安装社区版Debian6镜像(也有7和8,方法大同小异) 最后简单介绍了网络安装原版Debian 小记 非网络安装,没网也没事,再也不用担心网速度 ...

  7. Apache Commons 相关工具类使用

    Apache Commons Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 ...

  8. 基准测试--->sysbench

    sysbench sysbench简介 sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库:主要包括以下几种测试: cpu性能 磁盘io性能 调度程序性能 内存分配及传输速度 POSI ...

  9. Nginx(一) 简介

    Nginx简介 一款基于异步框架的轻量级高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器 特点 高并发量:基于 epoll/kqueue 模型开发,支持高并 ...

  10. Java基于OpenCV实现走迷宫(图片+路线展示)

    Java基于OpenCV实现走迷宫(图片+路线展示) 由于疫情,待在家中,太过无聊.同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来.特此记录. 原图: 这张图,由于不是非常清晰, ...