一个小工具的故事
今天翻QQ盆友圈,看到老妈说好多好友晒收到的礼物,而自己没收到。
一开始我没反应过来,然后才想到今天是5月的第二个星期日"_"
所以,送什么好呢,我远在千里上学,难不成退点生活费回去@_@
我忽然想到一件事:
老妈的电脑之前没有处理压缩文件的软件,我帮她下载WinRaR解决完弹窗广告的问题后我就在想,为什么我不能自己写一个处理压缩包的程序呢,后来我看到python中有相关的库,所以回校后我就开始了。
我真的把这个程序写了出来,现在它可以处理rar、zip、tar、gz这几种类型的压缩包文件了,当然,它还在进一步的完善中,但日常使用已经可以了。
分界线
—————————————————
不多说,上代码
import zipfile
import rarfile
import tarfile
import os
def aaa():
'''选项'''
global list1
global list2
global list3
global list4
list1 = ["A","a"]
list2 = ["B","b"]
list3 = ["C","c"]
list4 = ["D","d"]
def aab():
'''解压'''
global appendex_F_inp_1
global F_P
global F_inp_1
global H_F
F_inp_1 = input (">")
'''路径转换'''
T_F = F_inp_1.replace ("\\","\/")
F_P = T_F.replace ("\"","")
appendex_F_inp_1 = F_inp_1.split('.')[1]
H_F = F_inp_1.replace (".%s"%appendex_F_inp_1, "")
def aac():
'''自选路径'''
global H_P
global x_1
print ("\n请将指定的文件夹拖入并拖入")
P_H = input (">")
T_F = P_H.replace ("\\","\/")
H_P = T_F.replace ("\"","")
x_1 = H_P
def aad():
'''压缩'''
global file1
global file1_P
global file_1_P_1_1
file_1 = input(">")
file_1_1 = file_1.replace ("\\","\/")
file1 = file_1_1.replace ("\"","")
file_1_P_1_1 = file1.split('\/')[-1]
def aae():
'''文件格式'''
global M
global appendex_M
print ("\n请输入压缩文件名(包括后缀名zip/rar,推荐rar格式)")
M = input (">")
appendex_M= M.split('.')[1]
def aaf():
global appendex_N
global N
print ("\n请将相关的压缩包文件拖入")
fileN = input (">")
appendex_N= fileN.split('.')[1] #后缀判定
file_N = fileN.replace ("\\","\/")
N = file_N.replace ("\"","") #最终路径
def aag():
global file3
file_3 = input(">")
file_3_3 = file_3.replace ("\\","\/")
file3 = file_3_3.replace ("\"","")
def aah():
pass
print ("A.解压\nB.压缩\nC.在压缩包中添加\nD.显示压缩包中的文件\n")
aaa()
cho_1 = input (">")
if cho_1 in list1:
print ("\n请拖入要解压的文件")
aab()
print ("\nA.解压到当前文件夹\nB.自定义文件夹\n")
aaa()
cho_2 = input (">")
if cho_2 in list1:
if appendex_F_inp_1 == 'zip':
os.mkdir(H_F)
F_aaa= zipfile.ZipFile (F_P)
F_aaa.extractall(H_F)
F_P.close()
print ("请稍候")
print ("任务已完成")
elif appendex_F_inp_1 == 'rar':
os.mkdir(H_F)
F_aaa= rarfile.RarFile (F_P)
F_aaa.extractall(H_F)
F_P.close()
print ("请稍候")
print ("任务已完成")
elif appendex_F_inp_1 in ('tar','gz'):
os.mkdir(H_F)
F_aaa= tarfile.TarFile (F_P)
F_aaa.extractall(H_F)
F_P.close()
print ("请稍候")
print ("任务已完成")
if cho_2 in list2:
aac()
if appendex_F_inp_1 == 'zip':
F_aaa= zipfile.ZipFile (F_P)
F_aaa.extractall(H_P)
F_P.close()
print ("请稍候")
print ("任务已完成")
elif appendex_F_inp_1 == 'rar':
F_aaa= rarfile.RarFile (F_P)
F_aaa.extractall(H_P)
F_P.close()
print ("请稍候")
print ("任务已完成")
elif appendex_F_inp_1 in ('tar','gz'):
F_aaa= tarfile.TarFile (F_P)
F_aaa.extractall(H_P)
F_P.close()
print ("请稍候")
print ("任务已完成")
if cho_1 in list2:
print ("\n压缩到\nA.第一个文件所在文件夹\nB.指定文件夹\n")
aaa()
cho_3 = input (">")
if cho_3 in list1:
aae()
if appendex_M == 'zip':
print ("\n请逐个拖入文件")
aad()
x = file1.replace (file_1_P_1_1,M)
F_aaa= zipfile.ZipFile(x,'a')
F_aaa.write(file1)
print ("请稍候")
print ("任务已完成")
while True:
file_2 = input(">")
if file_2 != 'end':
F_aaa.write(file_2)
print ("请稍候")
print ("任务已完成")
if file_2 == 'end':
F_aaa.close()
print ("任务已结束")
break
if appendex_M == 'rar':
print ("\n请逐个拖入文件")
aad()
x = file1.replace ("%s"%file_1_P_1_1, "%s"% M)
F_aaa= rarfile.RarFile(x,'a')
F_aaa.write(file1)
print ("请稍候")
print ("任务已完成")
while True:
file_2 = input(">")
if file_2 != 'end':
F_aaa.write(file_2)
print ("请稍候")
print ("任务已完成")
if file_2 == 'end':
F_aaa.close()
print ("任务已结束")
break
if appendex_M in ('tar','gz'):
print ("\n请逐个拖入文件")
aad()
x = file1.replace ("%s"%file_1_P_1_1, "%s"% M)
F_aaa= tarfile.TarFile(x,'a')
F_aaa.write(file1)
print ("请稍候")
print ("任务已完成")
while True:
file_2 = input(">")
if file_2 != 'end':
F_aaa.write(file_2)
print ("请稍候")
print ("任务已完成")
if file_2 == 'end':
F_aaa.close()
print ("任务已结束")
break
if cho_3 in list2:
aac()
aae()
if appendex_M == 'zip':
print ("\n请逐个拖入文件")
aad()
x_1 = H_P
y = x_1.replace (H_P,H_P+"//"+M)
F_aaa= zipfile.ZipFile(y,'a')
F_aaa.write(file1)
print ("请稍候")
print ("任务已完成")
while True:
file_2 = input(">")
if file_2 != 'end':
F_aaa.write(file_2)
print ("请稍候")
print ("任务已完成")
if file_2 == 'end':
F_aaa.close()
print ("任务已结束")
break
if appendex_M == 'rar':
print ("\n请逐个拖入文件")
aad()
x_1 = H_P
y = x_1.replace (H_P,H_P+"//"+M)
F_aaa= rarfile.RarFile(y,'a')
F_aaa.write(file1)
print ("请稍候")
print ("任务已完成")
while True:
file_2 = input(">")
if file_2 != 'end':
F_aaa.write(file_2)
print ("请稍候")
print ("任务已完成")
if file_2 == 'end':
F_aaa.close()
print ("任务已结束")
break
if appendex_M in ('tar','gz'):
print ("\n请逐个拖入文件")
aad()
x_1 = H_P
y = x_1.replace (H_P,H_P+"//"+M)
F_aaa= tarfile.TarFile(y,'a')
F_aaa.write(file1)
print ("请稍候")
print ("任务已完成")
while True:
file_2 = input(">")
if file_2 != 'end':
F_aaa.write(file_2)
print ("请稍候")
print ("任务已完成")
if file_2 == 'end':
F_aaa.close()
print ("任务已结束")
break
if cho_1 in list3:
aaf()
if appendex_N == 'zip':
print ("\n请逐个拖入文件")
aag()
F_aaa= zipfile.ZipFile(N,'a')
F_aaa.write(file3)
print ("请稍候")
print ("任务已完成")
while True:
file_3 = input(">")
if file_3 != 'end':
F_aaa.write(file_3)
print ("请稍候")
print ("任务已完成")
if file_3 == 'end':
F_aaa.close()
print ("任务已结束")
break
if appendex_N == 'rar':
print ("\n请逐个拖入文件")
aag()
F_aaa= rarfile.RarFile(N,'a')
F_aaa.write(file3)
print ("请稍候")
print ("任务已完成")
while True:
file_3 = input(">")
if file_3 != 'end':
F_aaa.write(file_3)
print ("请稍候")
print ("任务已完成")
if file_3 == 'end':
F_aaa.close()
print ("任务已结束")
break
if appendex_N in ('tar','gz'):
print ("\n请逐个拖入文件")
aag()
F_aaa= tarfile.TarFile(N,'a')
F_aaa.write(file3)
print ("请稍候")
print ("任务已完成")
while True:
file_3 = input(">")
if file_3 != 'end':
F_aaa.write(file_3)
print ("请稍候")
print ("任务已完成")
if file_3 == 'end':
F_aaa.close()
print ("任务已结束")
break
if cho_1 in list4:
aaf()
if appendex_N == 'zip':
print ("\n以下为压缩包内全部文件")
F_aaa= zipfile.ZipFile(N,'r')
x = F_aaa.printdir()
print (x)
F_aaa.close()
if appendex_N == 'rar':
print ("\n以下为压缩包内全部文件")
F_aaa= rarfile.RarFile(N,'r')
x = F_aaa.printdir()
print (x)
F_aaa.close()
if appendex_N in ('tar','gz'):
print ("\n以下为压缩包内全部文件")
F_aaa= tarfile.TarFile(N,'r')
x = F_aaa.printdir()
print (x)
F_aaa.close()
os.system('pause')
最大技术难题
在此之前,我写的关于处理文件的一些程序,都是本着自己能用、会用就行的原则,所以基本上处理的文件都必须在程序所在的文件夹中才可以处理,写这给程序时,我知道,不止我要用,我老妈也要用,肯定不能让操作过于复杂,不能每次都将处理文件移来移去,而且更不能每次输入长长的文件地址。
我误打误撞找到这样一个特性:
就是直接拖入文件可以输入一个与所需输入的地址类似的内容,所以,我只需要对它处理一下,就可以实现输入文件的效果(当然要不是输入到python中的地址一定要用"/“而不是”",也就不用那么麻烦)
于是就有了
T_F = F_inp_1.replace ("\\","\/")#先改\
F_P = T_F.replace ("\"","")#再去“”
虽然改后也不是那种最理想的形态,但的确是可以处理了。
结语
我给它命了个名,BlackBox Zip,毕竟我确实没给它加图形界面。。。
于是我把它打包成exe文件(pyinstaller -F 文件名
)发给老妈,当作母亲节的礼物
————————————结束———————————