__作者_ _?=?威利日
#!/usr/bin/env?python3
進口?操作系統(Operating System)
進口?[計]系統復制命令(system的簡寫)
進口?時間
進口?舒蒂爾
進口?zipfile
從哪裏?zipfile?進口?ZIP _放氣
#Zip文件處理類
班級?ZFile(對象):
def?__init__(self,fname,?mode='r ',?basedir=“”):
self.fname?=?fnname
self.mode?=?方式
如果?self.mode?在?(‘w’,?a’):
self.zfile?=?zipfile。ZipFile(fname,模式,?壓縮=ZIP_DEFLATED)
否則:
self.zfile?=?zipfile。ZipFile(fname,自我模式)
self.basedir?=?basedir
如果?不是嗎?self.basedir:
self.basedir?=?os.path.dirname(fname)
def?addfile(self,路徑,?arcname=None):
路徑?=?path.replace('//',?'/')
如果?不是嗎?arcname:
如果?path.startswith(self.basedir):
arcname?=?路徑[len(self.basedir):]
否則:
arcname?=?''
self.zfile.write(路徑,?arcname)
def?addfiles(self,路徑):
為了什麽?路徑?在?路徑:
如果?isinstance(路徑,元組):
self . addfile(*路徑)
否則:
self.addfile(路徑)
def?關閉(自己):
self.zfile.close()
def?提取_到(自我,?路徑):
為了什麽?p?在?self.zfile.namelist():
自解壓(p,?路徑)
def?提取(自我,?fname,?路徑):
如果?不是嗎?fname.endswith('/'):
fn?=?os.path.join(路徑,?fname)
ds?=?os.path.dirname(fn)
如果?不是嗎?os.path.exists(ds):
os.makedirs(ds)
用什麽?打開(fn,WB’)?作為?女:
f.write(self.zfile.read(fname))
#創建壹個Zip文件
def?createZip(zfile,文件):
z?=?ZFile(zfile,?w’)
z.addfiles(文件)
關閉()
#將Zip文件解壓縮到指定的文件夾
def?extractZip(zfile,路徑):
z?=?ZFile
z.extract_to(路徑)
關閉()
#將rar解壓縮到指定的文件夾
def?extractRar(zfile,路徑):
rar_command1?=?“WinRAR.exe?x?-伊布克?%s?%s "?%?(zfile,?路徑)
rar_command2?=?r " " C:\ winrar . exe "?x?-伊布克?%s?“%s”嗎?%?(zfile,?路徑)
嘗試:
res?=?操作系統(rar_command1)
如果?res?==?0:
打印("路徑?好吧。”)
除了:
嘗試:
res?=?操作系統(rar_command2)
如果?res?==?0:
打印(“成功?去哪?unrar?那個?文件?{}."。格式(路徑))
除了:
打印('錯誤:?可以嗎?不是嗎?unrar?那個?文件?{}'.格式(路徑))
#?將多個壓縮文件解壓到壹個臨時文件夾中。
def?提取文件(文件列表):
紐迪爾?=?str(int(time.time()))
為了什麽?fn?在?文件列表:
subdir?=?os.path.join(newdir,?fn)
如果?不是嗎?os.path.exists(子目錄):
os.makedirs(子目錄)
如果?fn.endswith('。zip’):
extractZip(fn,子表盤)
埃利夫?fn.endswith('。rar’):
extractRar(fn,子表盤)
回歸?紐迪爾
#?在文件夾中找到壹些文件。返回壹個文件,其內容包含findstr_list中的所有字符串。
def?findstr_at(basedir,file_list,?findstr_list):
文件?=?[]
為了什麽?r,?ds,?fs?在?os.walk(basedir):
為了什麽?fn?在?fs:
如果?fn?在?文件列表:
用什麽?open(os.path.join(r,fn))?作為?女:
s?=?閱讀()
如果?全部(我?在?s?為了什麽?我?在?findstr_list):
files.append(os.path.join(r,fn))
回歸?文件
如果?__name__?==?__main__ ':
文件?=?【我?為了什麽?我?在?sys.argv[1:]?如果?不是嗎?I .以('-')開頭]
解壓縮文件?=?【我?為了什麽?我?在?文件?如果?i.endswith('。zip’)?還是?i.endswith('。rar')]
xmlfiles?=?【我?為了什麽?我?在?文件?如果?i.endswith('。xml')]
save_unzipdir?=?真的嗎?如果?-是嗎?在?sys.argv?不然呢?錯誤的
findstr?=?[i.split('=')[-1]?為了什麽?我?在?sys.argv?如果?I .開始於('- find=')]
findstring?=?',?'。join(['`{} `'。格式(壹)?為了什麽?我?在?findstr])
紐迪爾?=?提取文件(解壓縮文件)
結果=?findstr_at(newdir,xmlfiles,?findstr)
如果?不是嗎?結果:
味精?=?沒有嗎?的?那個?文件?包含?那個?鑒於?字符串?{}.'
print(msg.format(findstring))
否則:
味精?=?'{}?文件?包含?那個?鑒於?字符串?{}:'
print(msg.format(len(result),?findstring))
打印(' \n '。join([i.replace(newdir+os.sep,?'')?為了什麽?我?在?已排序(結果)])
如果?不是嗎?save_unzipdir:
shutil.rmtree(newdir)$?python3?ziprar.py?aaa.zip?aaa2.zip?aaa3.zip?aaa.xml?aaa1.xml?aaa2.xml?- find="It?曾經是"?- find="when "
沒有嗎?的?那個?文件?包含?那個?鑒於?字符串?“它?是`,?“什麽時候”。
$?python3?ziprar.py?aaa.zip?aaa2.zip?aaa3.zip?aaa.xml?aaa1.xml?aaa2.xml?- find="It?曾經是"?- find="I "
2?文件?包含?那個?鑒於?字符串?“它?是`,?`我`:
aaa.zip/aaa2.xml
aaa2.zip/aaa2.xml
$?python3?ziprar.py?aaa.zip?aaa2.zip?aaa3.zip?aaa.xml?aaa1.xml?aaa2.xml?- find="It?曾是”
2?文件?包含?那個?鑒於?字符串?“它?was `:
aaa.zip/aaa2.xml
aaa2.zip/aaa2.xml