Python 解压缩Zip和Rar文件到指定目录
#__author__ = 'Joker'
# -*- coding:utf-8 -*-
import urllib
import os
import os.path
import zipfile
from zipfile import *
import sys
reload(sys)
sys.setdefaultencoding('gbk') rootdir = "F:/50_GIS/1000_Tools" # 指明被遍历的文件夹
zipdir = "F:/000_Terrain/zipdir" # 存储解压缩后的文件夹
#Zip文件处理类
class ZFile(object):
def __init__(self, filename, mode='r', basedir=''):
self.filename = filename
self.mode = mode
if self.mode in ('w', 'a'):
self.zfile = zipfile.ZipFile(filename, self.mode, compression=zipfile.ZIP_DEFLATED)
else:
self.zfile = zipfile.ZipFile(filename, self.mode)
self.basedir = basedir
if not self.basedir:
self.basedir = os.path.dirname(filename) def addfile(self, path, arcname=None):
path = path.replace('//', '/')
if not arcname:
if path.startswith(self.basedir):
arcname = path[len(self.basedir):]
else:
arcname = ''
self.zfile.write(path, arcname) def addfiles(self, paths):
for path in paths:
if isinstance(path, tuple):
self.addfile(*path)
else:
self.addfile(path) def close(self):
self.zfile.close() def extract_to(self, path):
for p in self.zfile.namelist():
self.extract(p, path) def extract(self, filename, path):
if not filename.endswith('/'):
f = os.path.join(path, filename)
dir = os.path.dirname(f)
if not os.path.exists(dir):
os.makedirs(dir)
file(f, 'wb').write(self.zfile.read(filename)) #创建Zip文件
def createZip(zfile, files):
z = ZFile(zfile, 'w')
z.addfiles(files)
z.close() #解压缩Zip到指定文件夹
def extractZip(zfile, path):
z = ZFile(zfile)
z.extract_to(path)
z.close() #解压缩rar到指定文件夹
def extractRar(zfile, path):
rar_command1 = "WinRAR.exe x -ibck %s %s" % (zfile, path)
rar_command2 = r'"C:\WinRAR.exe" x -ibck %s %s' % (zfile, path)
if os.system(rar_command1) == 0:
print "Path OK."
else: if os.system(rar_command2) != 0:
print "Error."
else:
print "Exe OK" #获得文件名和后缀
def GetFileNameAndExt(filename):
(filepath,tempfilename) = os.path.split(filename);
(shotname,extension) = os.path.splitext(tempfilename);
return shotname,extension #定义文件处理数量-全局变量
fileCount = 0 #递归获得rar文件集合
def getFiles(filepath):
#遍历filepath下所有文件,包括子目录
files = os.listdir(filepath)
for fi in files:
fi_d = os.path.join(filepath,fi)
if os.path.isdir(fi_d):
getFiles(fi_d)
else:
global fileCount
global zipdir
fileCount = fileCount + 1
# print fileCount
fileName = os.path.join(filepath,fi_d)
filenamenoext = GetFileNameAndExt(fileName)[0]
fileext = GetFileNameAndExt(fileName)[1]
# 如果要保存到同一个文件夹,将文件名设为空
filenamenoext = ""
zipdirdest = zipdir + "/" + filenamenoext + "/"
if fileext in ['.zip','.rar']:
if not os.path.isdir(zipdirdest):
os.mkdir(zipdirdest)
if fileext == ".zip" :#
print str(fileCount) + " -- " + fileName
# unzip(fileName,zipdirdest)
extractZip(fileName,zipdirdest)
elif fileext == ".rar":
print str(fileCount) + " -- " + fileName
extractRar(fileName, zipdirdest) #递归遍历“rootdir”目录下的指定后缀的文件列表
getFiles(rootdir)
Zip处理:http://www.cnblogs.com/qq78292959/archive/2013/03/27/2985310.html
文件处理参考:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html
Python 解压缩Zip和Rar文件到指定目录的更多相关文章
- 解压.zip,.tar.gz文件到指定目录,重命名文件
1.解压文件到指定目录 /** * 解压文件到指定目录 * zipFile:要解压的文件 * descDir:解压到哪个文件 * */ @SuppressWarnings("rawtypes ...
- 利用 Python 破解 ZIP 或 RAR 文件密码
我们经常会从网络上下载一些带密码的压缩包,想要获取里面的内容,往往就要给提供商支付一些费用.想要白嫖其中的内容,常见的做法是百度搜索一些压缩包密码破解软件,但后果相信体验过的人都知道.本文将会利用 P ...
- 【Python】自动生成html文件查看指定目录中的所有图片
获取本目录下的pic子目录中的所有图片(jpg,png,bmp,gif等,此处以jpg文件为例),然后生成一个image.html文件,打开该html文件即可在浏览器中查看pic子目录中的所有图片. ...
- 使用Python解压zip、rar文件
解压 zip 文件 基本解压操作 import zipfile ''' 基本格式:zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]]) ...
- Java实现对zip和rar文件的解压缩
通过java实现对zip和rar文件的解压缩
- java解压缩zip和rar的工具类
package decompress; import java.io.File; import java.io.FileOutputStream; import org.apache.tools.an ...
- Java解压上传zip或rar文件,并解压遍历文件中的html的路径
1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception { HttpSession session = request.getSe ...
- python循环解压rar文件
python循环解压rar文件 C:. │ main.py │ ├─1_STL_算法简介 │ STL_算法简介.rar │ └─2_STL_算法_填充新值 STL_算法_填充新值.rar 事情是这样的 ...
- Dream------Java--ant zip 对压缩文件进行指定位置的修改
ant zip 对压缩文件进行指定位置的修改 实现功能: 对2中文件进行修改: 需求: 在XX文件中,从二进制流的200字节位置开始,往后的30位字节数量.插入一个值 由于涉及到公司内部,不方便写太多 ...
随机推荐
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
http://www.cnblogs.com/myblesh/archive/2012/04/07/2435737.html 之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好堆栈. ...
- Makefile 7——自动生成依赖关系 三颗星
后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的.我们采用gcc的-MM选项结合sed命令.使用sed进行替换的目的是为了在目标名前加上“objs/”前缀.gcc的-E选项, ...
- java web 应用中包,接口的设计
采用标准的架构:描述从低层到高层首先是系统分析,找出你需要什么功能,然后按照下面的步骤执行: 数据库层:数据库层就是SQL语句.数据库.表.视图.触发器等等的创建和管理.这一层和JAVA无关,但是却是 ...
- 【Unity】动态调用其他脚本的函数
本文转载自:http://blog.csdn.net/smilingeyes/article/details/17767269 第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名( ...
- [4G]常用AT指令
The GPRS communication module is controlled by terminal (e.g. H50) firmware. The actions are mapped ...
- linux终端无打印信息的实现
linux启动时会又大量信息打印,若要使启动信息不打印,需修改内核中两处: 1. 内核配置项. CONFIG_SERIAL_ATMEL_CONSOLE=y //去掉终端配置选项.2. 内核解压缩 ...
- 网络硬盘录像机和数字硬盘录像机区别(nvr dvr ipc区别)
DVR Digital Video Recorder 数字硬盘录像机 NVR Network Video Recorder 网络硬盘录像机 DVR(数字硬盘录像机)和NVR(网络硬盘录像机)在 ...
- HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署
HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3. ...
- DataGridView:根据条件改变单元格的颜色
根据条件改变DataGridView行的颜色可以使用RowPrePaint事件. 示例程序界面如下: 示例程序代码如下: using System; using System.Collections. ...
- 关闭 禁用 Redis危险命令
Redis的危险命令主要有: flushdb,清空数据库 flushall,清空所有记录,数据库 config,客户端连接后可配置服务器 keys,客户端连接后可查看所有存在的键 我们常常需要禁用以上 ...