python壓縮rar
有些時候加密rar軟體經常會忘了密碼,但記得密碼的大概,於是乎用Python寫個程序來暴力破解吧:
首先要搞清楚如何用命令行來解壓縮,經研究,rar軟體解壓是用的unrar.exe,將這個程序拷貝到C:\windows,然後進入加密軟體包所在的文件夾,用命令行運行 下面的命令:
unrar.exe e -pabcd 123.rar
程序就是先前拷到C:\windows,然後參數e是指相對路徑,如果在是本文件夾下運行這個命令,則只打文件名就可以了,輸入密碼的方式是-p後面的欄位,假定是abcd,最後面的是要解壓的文件名。
下面我們解決如何用Python來運行windows下的命令行
import subprocess
command = 'unrar.exe e -n -pabcd 123.rar'
subprocess.call(command)
這樣也可以完成解壓,既然這樣,那就開干吧,寫一個暴力循環,我以4位字母為例,字母加的不全,實際使用可以視情況添加
list1=['a','b','c','d']
list2=['a','b','c','d']
list3=['a','b','c','d']
list4=['a','b','c','d']
for i1 in range(0,len(list1),1):
for i2 in range(0,len(list2),1):
for i3 in range(0, len(list3), 1):
for i4 in range(0, len(list4), 1):
password=list1[i1]+list2[i2]+list3[i3]+list4[i4]
print(password)
command = 'unrar.exe e -n -p' + password + ' 123.rar'
child = subprocess.call(command)
if child == 0:
print('解壓密碼是:',password)
break
child是返回值,為0表示解壓成功,可以挑出循環並列印密碼了,我實測,4位純數字或者字母,只需要十多秒就出來了,非常簡單
B. python語句:print(*[1,2,3]),是什麼意思
[1,2,3]是一個列表,裡面有3個元素。
你可以理解成列表是一個.rar壓縮文件,3個元素就是3個壓縮進.rar文件的文件。
而*[1,2,3]就是對這個壓縮文件(列表)解壓縮,自然會釋放出3個文件(元素)。
此外,元組、集合、字典、字元串也可以解壓縮,像:
print(*(1,2,3))
print(*[1,2,3])
print(*{1,2,3})
print(*{1:"a",2:"b",3:"c"})
print(*"123")
都可以產生相同的結果。
你可以將它們理解成是不同格式(.rar、.zip、.7z等)的壓縮文件,如果裡面的內容是相同的,解壓出來的文件自然也是相同的。
下圖是一個例子:
C. 利用python編程,在多個打包壓縮的文件中搜索指定字元串。有很多xml文件
ziprar.py
__author__='williezh'
#!/usr/bin/envpython3
importos
importsys
importtime
importshutil
importzipfile
fromzipfileimportZIP_DEFLATED
#Zip文件處理類
classZFile(object):
def__init__(self,fname,mode='r',basedir=''):
self.fname=fname
self.mode=mode
ifself.modein('w','a'):
self.zfile=zipfile.ZipFile(fname,mode,compression=ZIP_DEFLATED)
else:
self.zfile=zipfile.ZipFile(fname,self.mode)
self.basedir=basedir
ifnotself.basedir:
self.basedir=os.path.dirname(fname)
defaddfile(self,path,arcname=None):
path=path.replace('//','/')
ifnotarcname:
ifpath.startswith(self.basedir):
arcname=path[len(self.basedir):]
else:
arcname=''
self.zfile.write(path,arcname)
defaddfiles(self,paths):
forpathinpaths:
ifisinstance(path,tuple):
self.addfile(*path)
else:
self.addfile(path)
defclose(self):
self.zfile.close()
defextract_to(self,path):
forpinself.zfile.namelist():
self.extract(p,path)
defextract(self,fname,path):
ifnotfname.endswith('/'):
fn=os.path.join(path,fname)
ds=os.path.dirname(fn)
ifnotos.path.exists(ds):
os.makedirs(ds)
withopen(fn,'wb')asf:
f.write(self.zfile.read(fname))
#創建Zip文件
defcreateZip(zfile,files):
z=ZFile(zfile,'w')
z.addfiles(files)
z.close()
#解壓縮Zip到指定文件夾
defextractZip(zfile,path):
z=ZFile(zfile)
z.extract_to(path)
z.close()
#解壓縮rar到指定文件夾
defextractRar(zfile,path):
rar_command1="WinRAR.exex-ibck%s%s"%(zfile,path)
rar_command2=r'"C:WinRAR.exe"x-ibck%s%s'%(zfile,path)
try:
res=os.system(rar_command1)
ifres==0:
print("PathOK.")
except:
try:
res=os.system(rar_command2)
ifres==0:
print("Successtounrarthefile{}.".format(path))
except:
print('Error:cannotunrarthefile{}'.format(path))
#解壓多個壓縮文件到一個臨時文件夾
defextract_files(file_list):
newdir=str(int(time.time()))
forfninfile_list:
subdir=os.path.join(newdir,fn)
ifnotos.path.exists(subdir):
os.makedirs(subdir)
iffn.endswith('.zip'):
extractZip(fn,subdir)
eliffn.endswith('.rar'):
extractRar(fn,subdir)
returnnewdir
#查找一個文件夾中的某些文件,返迴文件內容包含findstr_list中所有字元串的文件
deffindstr_at(basedir,file_list,findstr_list):
files=[]
forr,ds,fsinos.walk(basedir):
forfninfs:
iffninfile_list:
withopen(os.path.join(r,fn))asf:
s=f.read()
ifall(iinsforiinfindstr_list):
files.append(os.path.join(r,fn))
returnfiles
if__name__=='__main__':
files=[iforiinsys.argv[1:]ifnoti.startswith('-')]
unzipfiles=[iforiinfilesifi.endswith('.zip')ori.endswith('.rar')]
xmlfiles=[iforiinfilesifi.endswith('.xml')]
save_unzipdir=Trueif'-s'insys.argvelseFalse
findstr=[i.split('=')[-1]foriinsys.argvifi.startswith('--find=')]
findstring=','.join(['`{}`'.format(i)foriinfindstr])
newdir=extract_files(unzipfiles)
result=findstr_at(newdir,xmlfiles,findstr)
ifnotresult:
msg='Noneofthefile(s)containthegivenstring{}.'
print(msg.format(findstring))
else:
msg='{}file(s)containthegivenstring{}:'
print(msg.format(len(result),findstring))
print(' '.join([i.replace(newdir+os.sep,'')foriinsorted(result)]))
ifnotsave_unzipdir:
shutil.rmtree(newdir)
$python3ziprar.pyaaa.zipaaa2.zipaaa3.zipaaa.xmlaaa1.xmlaaa2.xml--find="Itwas"--find="when"
Noneofthefile(s)containthegivenstring`Itwas`,`when`.
$python3ziprar.pyaaa.zipaaa2.zipaaa3.zipaaa.xmlaaa1.xmlaaa2.xml--find="Itwas"--find="I"
2file(s)containthegivenstring`Itwas`,`I`:
aaa.zip/aaa2.xml
aaa2.zip/aaa2.xml
$python3ziprar.pyaaa.zipaaa2.zipaaa3.zipaaa.xmlaaa1.xmlaaa2.xml--find="Itwas"
2file(s)containthegivenstring`Itwas`:
aaa.zip/aaa2.xml
aaa2.zip/aaa2.xml
D. python怎麼判斷文件是rar文件
Python自帶模塊zipfile可以完成zip壓縮文件的讀寫,而且使用非常方便,下面就來演示一下Python讀寫zip文件:
Python讀zip文件
下面的代碼給出了用Python讀取zip文件,列印出壓縮文件裡面所有的文件,並讀取壓縮文件中的第一個文件。
import zipfile
z = zipfile.ZipFile("zipfile.zip", "r")
#列印zip文件中的文件列表
for filename in z.namelist( ):
print 'File:', filename
#讀取zip文件中的第一個文件
first_file_name = z.namelist()[0]
content = z.read(first_file_name)
print first_file_name
print content
E. [python]求一段可以解壓🚓🚦Car.zip這種文件名字的python代碼
#__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)
F. python 中如何壓縮文件,並指定文件的壓縮之後的大小。
這個簡單啊。你先壓縮成一個ZIP文件。比如 example.zip
然後用python將它分割成,5個文件。e1,e2,e3,e4,e5
郵件發出去後,對方收到郵件,另存附件,然後在目錄下運行
e1+e2+e3+e4+e5 example.zip
此時windows就將依次將5個文件復制到同一個文件里去。
G. python 3.2版本 解壓rar/zip到指定目錄
python沒有rar模塊的
H. 求Python的tar壓縮命令
rar_command = 'winrar a -r %s %s' % (target,source)
改為
rar_command = 'tar -zcvf %s %s' % (target,source)
I. python壓縮成tar
Python壓縮文件為tar、gzip的方源碼。需要應用到os、tarfile、gzip、string、shutil這幾個Python類庫中的方法。不同於Python Gzip壓縮與解壓模塊,今天我們要用自己的方法實現壓...
J. python自動化全程班解壓
import subprocess
import zipfile as zf
import platform as pf
import os
class ZipObj():
def __init__(self, filepathname, passwd,tip_path):
self.filepathname = filepathname #文件名
self.passwd = passwd #壓縮密碼
self.Tip_Path = tip_path #注釋
def enCrypt(self, deleteSource=False):
# """
# 壓縮加密,並刪除原數據
# window系統調用rar程序
#
# linux等其他系統調用內置命令 zip -P123 tar source
# 默認不刪除原文件
# """
target = "b.zip"
source = self.filepathname
if pf.system() == "Windows":
# rar a -p"www.hanxinkong.top" filename.zip D:/360MoveData/Users/Administrator/Desktop/test/*
# rar a -ep1 -p"www.hanxinkong.top" test.zip - z"D:\360MoveData\Users\Administrator\Desktop\Tip.txt" D:/360MoveData/Users/Administrator/Desktop/test/*
# ep1 排除上級(基本)目錄
cmd = ['rar','a', '-p"%s"' % (self.passwd), target, source]
cmd_tip = ['rar', 'c', 'z"%s"' % (self.Tip_Path), target]
print (cmd)
p = subprocess.Popen(cmd, executable=r'D:\COMMONDSAFE\winrar\WinRAR.exe')
p.wait()